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
相关产品推荐
相关产品推荐

