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

SQL Server如何精准筛选含独立'dri'标识的行?排除嵌入单词

问题描述

我有一个存储前端网站用户输入文本的列,用户可输入任意文本,同时会加入特定字母组合(如'dri')表示工种。示例数据如下:

Row 1: P49384; Open vehicle bonnet-BO-dri 22/10
Row 2: P93818; Vehicle exhaust-BO 10/20
Row 3: P1933; battery dri-pu-103/2
Row 4: P3193; screwdriver-pu 423
Row 5: X939; seats bo
Row 6: P9381-vehicle-pu-bo dri

需要筛选仅包含独立'dri'标识的行,排除像screwdriver这种嵌入单词内的情况。用普通LIKE '%dri%'或PATINDEX('%[d][r][i]%', column) > 0会错误包含第4行,求SQL Server中的精准筛选方法。

解决方案

要匹配独立的'dri',核心是确保'dri'前后不是字母字符(或处于文本首尾),以下是几种可行方案:

方法1:PATINDEX正则模式匹配

利用SQL Server的PATINDEX通配符,覆盖'dri'在文本中间、开头、结尾以及作为唯一内容的场景:

SELECT *
FROM your_table
WHERE PATINDEX('%[^a-zA-Z]dri[^a-zA-Z]%', your_column) > 0
   OR PATINDEX('^dri[^a-zA-Z]%', your_column) > 0
   OR PATINDEX('%[^a-zA-Z]dri$', your_column) > 0
   OR your_column = 'dri';
  • [^a-zA-Z]匹配非字母字符,避免'dri'被其他字母包裹
  • 后三个分支分别处理'dri'在文本开头、结尾,或是唯一内容的情况

方法2:LIKE多条件组合

如果偏好更直观的写法,可通过多个LIKE条件组合实现相同效果:

SELECT *
FROM your_table
WHERE (your_column LIKE '%[^a-zA-Z]dri[^a-zA-Z]%'
    OR your_column LIKE 'dri[^a-zA-Z]%'
    OR your_column LIKE '%[^a-zA-Z]dri'
    OR your_column = 'dri');

方法3:STRING_SPLIT拆分匹配(SQL Server 2016+)

如果文本中的标识通过空格、-、;等分隔符区分,可拆分文本后精准匹配:

SELECT DISTINCT t.*
FROM your_table t
CROSS APPLY STRING_SPLIT(t.your_column, ' -;') s
WHERE s.value = 'dri';

这种方法适合有明确分隔规则的场景,能直接定位独立的'dri'字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:01:57