我有一个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%'
这甚至可能吗?
答案 0 :(得分:1)
您的SELECT
只能找到文本中包含通配符之间位的行:您不能将LIKE
与比较逻辑组合在一起。
你可以做的是使用正则表达式删除文本的相关部分,然后分析它。
但请记住,结合
一下子将无法提供最佳性能!我建议如下:
所以你的触发器会有类似的东西:
select
ltrim(rtrim(substring(paragraphs, instr(paragraphs, 'count:') + 6, 10)))
from books
where instr(paragraphs, 'count:') > 0
可以在'count:'
之后获得接下来的10个字符,修剪空格。然后你可以通过例如进一步改进它。
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
可供您使用的功能。