You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过SELECT LIKE语句匹配文本字段中的整行目标字符串?

解决多行文本字段中匹配整行内容的SQL问题

你的问题核心是要在存储多行文本的keywords字段里,精准匹配那些包含**整行恰好是"easter rising"**的记录,而不是只要字段里出现这个短语就匹配。原来的LIKE '%easter rising%'会把包含该短语的所有记录都拉出来,所以才会不符合预期。

下面分不同数据库给出针对性的解决方案:

支持正则表达式的数据库(MySQL、PostgreSQL、SQLite)

正则表达式可以方便地匹配行边界(字段开头/结尾或者换行符),确保我们只匹配整行的目标字符串:

MySQL/MariaDB

SELECT ID FROM titles 
WHERE keywords REGEXP '(^|\n)easter rising(\n|$)'
  • (^|\n):匹配字段的起始位置,或者一个换行符(表示新行开始)
  • easter rising:我们要精准匹配的目标内容
  • (\n|$):匹配换行符(表示该行结束,后面还有其他行),或者字段的结束位置(表示这是最后一行)

PostgreSQL

考虑到Windows风格的换行符是\r\n,可以兼容处理:

SELECT ID FROM titles 
WHERE keywords ~ '(^|\r?\n)easter rising(\r?\n|$)'

如果需要不区分大小写匹配,把~换成~*即可。

SQLite

确保你的SQLite环境启用了正则表达式扩展,然后使用:

SELECT ID FROM titles 
WHERE keywords REGEXP '(^|\n)easter rising(\n|$)'

SQL Server

SQL Server对换行符的处理需要明确指定换行符字符(CHAR(10)是Unix换行,CHAR(13)+CHAR(10)是Windows换行),我们可以用LIKE组合多个条件来覆盖所有情况:

SELECT ID FROM titles 
WHERE keywords LIKE '%' + CHAR(10) + 'easter rising' + CHAR(10) + '%'
   OR keywords LIKE 'easter rising' + CHAR(10) + '%'
   OR keywords LIKE '%' + CHAR(10) + 'easter rising'
   OR keywords = 'easter rising'
  • 第一条:匹配目标字符串在字段中间(前后都有换行)
  • 第二条:匹配目标字符串是第一行,后面还有其他内容
  • 第三条:匹配目标字符串是最后一行,前面有其他内容
  • 第四条:匹配整个字段就是目标字符串

验证你的示例数据

用上面的语句测试你的示例:

  • ID1:假设keywords是两行文本(ireland history和easter rising),会匹配第三条条件,被选中
  • ID2:keywords是单行britain easter rising campaign,不满足任何条件,被排除
  • ID3:keywords是单行france easter rising,不满足任何条件,被排除
  • ID4:keywords就是easter rising,匹配第四条条件,被选中
    完全符合你期望的结果。

如果需要区分大小写,只需要在对应语句里加上大小写敏感的处理即可(比如MySQL用REGEXP BINARY,PostgreSQL去掉~*改用~)。

内容的提问来源于stack exchange,提问作者Nico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:07:23