我有一个LONGTEXT
用于存储文本段落的列。假设在这些段落中有类似的内容:
Text text text text
COUNT: 75 text text
text text text text
text text text text
是否可以对所有文本中的小字符串“COUNT:75”进行比较查询?
我的第一个想法是
SELECT * FROM `books`
WHERE `paragraphs` LIKE '%COUNT: >0%'
这甚至可能吗?
您SELECT
只会找到文本包含通配符之间精确位的行:您不能将 aLIKE
与这样的比较逻辑结合起来。
但是,您可以做的是使用正则表达式去除文本的相关部分,然后对其进行分析。
但请记住,结合
一下子不会提供最佳性能!我建议如下:
所以你的触发器会有类似的东西:
select
ltrim(rtrim(substring(paragraphs, instr(paragraphs, 'count:') + 6, 10)))
from books
where instr(paragraphs, 'count:') > 0
这将为您提供 之后的下一个 10 个字符'count:'
,去掉空格。然后你可以通过例如进一步细化它
select substring(text_snippet, 1, instr(text_snippet, ' ')) as count_value
from
(
select
ltrim(rtrim(substring(paragraphs, instr(paragraphs, 'count:') + 6, 10)))
as text_snippet
from books
where instr(paragraphs, 'count:') > 0
) x
where isnumeric(substring(text_snippet, 1, instr(text_snippet, ' '))) = 1
获取数字值跟在 COUNT 位之后的行。
然后,您可以提取 COUNT 旁边的数值,将它们作为数字保存在单独的表中,然后像这样使用 JOIN:
select b.*
from books b inner join books_count_values v
on b.id = v.books_id
where v.count_value > 0
看这里
http://dev.mysql.com/doc/refman/5.1/en/string-functions.html
供您使用的功能。