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

如何在SQL Server中提取多个子串关键词并在多列展示结果?

解决方案:基于关键词匹配生成标记列

没问题,我来帮你搞定这个需求!核心思路是用SQL的CASE语句结合字符串匹配逻辑,针对每个目标关键词生成对应的标记列——匹配到就显示勾选标记(比如✓),没匹配到就留空(或者你想要的X)。

基础通用SQL实现

假设你的TEXT列名为content(记得换成表中实际的列名),针对你提到的关键词,SQL可以这么写:

SELECT
  -- 匹配关键词 "TIME"(确保是完整单词,避免误匹配类似TIMEOUT的词)
  CASE 
    WHEN content LIKE '% TIME %' 
         OR content LIKE 'TIME %' 
         OR content LIKE '% TIME' 
    THEN '✓' 
  END AS TIME,
  -- 匹配组合关键词 "TIME OD"
  CASE 
    WHEN content LIKE '% TIME OD %' 
         OR content LIKE 'TIME OD %' 
         OR content LIKE '% TIME OD' 
    THEN '✓' 
  END AS TIME_OD,
  -- 匹配关键词 "COST"
  CASE 
    WHEN content LIKE '% COST %' 
         OR content LIKE 'COST %' 
         OR content LIKE '% COST' 
    THEN '✓' 
  END AS COST,
  -- 保留原文本列方便验证结果
  content
FROM Usage;

更精准的正则表达式实现(针对支持正则的数据库)

如果你的数据库支持正则表达式(比如PostgreSQL、MySQL、SQL Server 2016+),可以用正则来更精准地匹配完整的单词/短语,避免部分匹配的问题:

PostgreSQL版本

SELECT
  CASE WHEN content ~ '\mTIME\M' THEN '✓' END AS TIME,
  CASE WHEN content ~ '\mTIME OD\M' THEN '✓' END AS TIME_OD,
  CASE WHEN content ~ '\mCOST\M' THEN '✓' END AS COST,
  content
FROM Usage;

这里\m表示单词开头,\M表示单词结尾,确保匹配的是独立的关键词或短语。

MySQL版本

SELECT
  CASE WHEN content REGEXP '[[:<:]]TIME[[:>:]]' THEN '✓' END AS TIME,
  CASE WHEN content REGEXP '[[:<:]]TIME OD[[:>:]]' THEN '✓' END AS TIME_OD,
  CASE WHEN content REGEXP '[[:<:]]COST[[:>:]]' THEN '✓' END AS COST,
  content
FROM Usage;

可选调整:未匹配时返回X

如果你希望未匹配的位置显示X而非空值,只需要给CASE语句加上ELSE分支:

CASE WHEN content ~ '\mTIME\M' THEN '✓' ELSE 'X' END AS TIME

注意事项

  • 替换content为你表中实际的TEXT列名
  • 如果需要忽略大小写,可以用LOWER()函数统一转换,比如LOWER(content) LIKE '% time %'
  • 组合关键词要确保是连续的短语,比如"TIME OD"不会被其他字符拆分

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:05:53