如何在MS SQL SERVER中对逗号分隔值的字段使用WHERE子句
MSSQL SERVER 逗号分隔字符串字段匹配查询方案
注意事项
直接使用LIKE '%匹配值%'会出现误匹配问题,例如查询ELITE时,会错误命中包含SUPERELITE的记录,因此推荐使用以下两种方案:
方案1:SQL Server 2016及以上版本(推荐)
使用SQL Server内置的STRING_SPLIT函数拆分字符串后匹配,准确性最高:
-- 示例:查询字段包含ELITE的所有行 SELECT DISTINCT t.* FROM 你的表名 t CROSS APPLY STRING_SPLIT(t.你的字段名, ',') s WHERE s.value = 'ELITE' -- 如需匹配多个值,例如同时包含ELITE或DELUXE SELECT DISTINCT t.* FROM 你的表名 t CROSS APPLY STRING_SPLIT(t.你的字段名, ',') s WHERE s.value IN ('ELITE', 'DELUXE')
注:加DISTINCT是为了避免一行存在多个匹配值时返回重复记录
方案2:SQL Server 2016以下低版本
通过给字段前后拼接逗号的方式避免误匹配,不需要额外自定义拆分函数:
-- 示例:查询字段包含ELITE的所有行 SELECT * FROM 你的表名 WHERE ',' + 你的字段名 + ',' LIKE '%,ELITE,%' -- 如需匹配多个值,例如同时包含ELITE或DELUXE SELECT * FROM 你的表名 WHERE ',' + 你的字段名 + ',' LIKE '%,ELITE,%' OR ',' + 你的字段名 + ',' LIKE '%,DELUXE,%'
特殊场景处理
如果你的字段存储内容本身包含<strong>、</strong>标签,直接调整匹配值即可,例如:
WHERE ',' + 你的字段名 + ',' LIKE '%,<strong>ELITE</strong>,%'
内容的提问来源于stack exchange,提问作者Fazil Mir
相关产品推荐
相关产品推荐

