MySQL比较查询长文本列
我有一个MySQL比较查询长文本列,mysql,longtext,Mysql,Longtext,我有一个LONGTEXT列,用来存储文本的段落。假设在这些段落中有如下内容: Text text text text COUNT: 75 text text text text text text text text text text select ltrim(rtrim(substring(paragraphs, instr(paragraphs, 'count:') + 6, 10))) from books where instr(paragraphs, 'count:')
LONGTEXT
列,用来存储文本的段落。假设在这些段落中有如下内容:
Text text text text
COUNT: 75 text text
text text text text
text text text text
select
ltrim(rtrim(substring(paragraphs, instr(paragraphs, 'count:') + 6, 10)))
from books
where instr(paragraphs, 'count:') > 0
是否可以对所有文本中的小字符串“COUNT:75”进行比较查询
我的第一个想法是
SELECT * FROM `books`
WHERE `paragraphs` LIKE '%COUNT: >0%'
这可能吗?您的
选择将只找到文本中包含通配符之间精确位的行:您不能将类似的与类似的比较逻辑组合在一起
不过,您可以做的是使用正则表达式删除文本的相关部分,然后对其进行分析
不过,请记住,这一点
- 大量文本
- 文本内容逻辑
- 正则表达式
所有这些都不能同时提供最佳性能!我建议如下:
使用触发器删除文本的一部分,以便
可管理的东西(即50个字符左右)来使用,
将此子文本插入到单独的表中
使用MySql正则表达式或全文函数分析计数
所以你的触发器会有这样的东西:
Text text text text
COUNT: 75 text text
text text text text
text text text text
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旁边的数值,将其作为数字保存在单独的表中,然后使用如下连接:
select b.*
from books b inner join books_count_values v
on b.id = v.books_id
where v.count_value > 0
看这里
对于您可以使用的函数。是的,使用“like”总是可能的,即使您只想使用一列进行搜索,您也可能想看看这里:并阅读布尔全文搜索)@Najzero:我认为OP希望将全文比较与对全文内容的定性检查结合起来,在这种情况下,LIKE不会削减它。感谢您的所有输入。