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

如何简化多列多字符串的LIKE条件判断SQL语句?

可行的替代方案

1. 字符串拼接 + 批量匹配(部分数据库支持)

如果你的数据库支持ANY语法(比如PostgreSQL),可以把目标关键词整理成列表,结合拼接后的列完成匹配:

CASE WHEN CONCAT(col1, '-', col2) LIKE ANY ('%done%', '%completed%') THEN '匹配成功' ELSE '未匹配' END AS status

也可以用子查询配合EXISTS实现通用兼容:

CASE 
  WHEN EXISTS (
    SELECT 1 
    FROM (VALUES ('%done%'), ('%completed%')) AS patterns(pattern)
    WHERE CONCAT(col1, '-', col2) LIKE pattern
  ) THEN '匹配成功' 
  ELSE '未匹配' 
END AS status

2. 正则表达式匹配(多数现代数据库支持)

正则表达式可以一次性指定多个匹配项,写法更简洁:

  • MySQL/MariaDB:
CASE WHEN REGEXP_LIKE(CONCAT(col1, col2), 'done|completed') THEN '匹配成功' ELSE '未匹配' END AS status
  • PostgreSQL:
CASE WHEN CONCAT(col1, col2) ~* 'done|completed' THEN '匹配成功' ELSE '未匹配' END AS status
-- ~* 表示不区分大小写,区分大小写用 ~
  • SQL Server(2017+):
CASE WHEN REGEXP_LIKE(CONCAT(col1, col2), 'done|completed') THEN '匹配成功' ELSE '未匹配' END AS status

3. 提取关键词到CTE/临时表(适合大量关键词场景)

如果需要匹配的关键词数量很多,把它们放到CTE里,通过关联查询判断,后续维护只需修改关键词列表:

WITH keyword_patterns AS (
  SELECT '%done%' AS pattern UNION ALL
  SELECT '%completed%' AS pattern UNION ALL
  SELECT '%finished%' AS pattern -- 可继续添加更多关键词
)
SELECT 
  t.*,
  CASE WHEN EXISTS (
    SELECT 1 FROM keyword_patterns k
    WHERE t.col1 LIKE k.pattern OR t.col2 LIKE k.pattern
  ) THEN '匹配成功' ELSE '未匹配' END AS status
FROM your_table t

注意事项

  • 若col1/col2可能为NULL,拼接时用COALESCE处理空值,比如CONCAT(COALESCE(col1, ''), '-', COALESCE(col2, '')),避免拼接结果为NULL导致匹配失效。
  • 正则匹配的大小写规则需根据数据库设置或运算符调整(比如PostgreSQL的~*不区分大小写)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:50:35