T-SQL中使用LIKE运算符匹配多值列与单值列的问题咨询
T-SQL 分号分隔多值列与单值列匹配解决方案
直接使用LIKE结合通配符%匹配会出现边界错误,例如列B值为a时,列A中的ab、ca等内容会被误判为匹配,可根据SQL Server版本选择以下方案:
方案1:SQL Server 2016及以上版本(推荐)
使用内置STRING_SPLIT函数拆分多值列后精准匹配:
SELECT * FROM 你的表名 WHERE EXISTS ( SELECT 1 -- 先移除列A的方括号,再按分号拆分内容 FROM STRING_SPLIT(REPLACE(REPLACE(列A, '[', ''), ']', ''), ';') -- 移除列B的方括号后和拆分后的值做精准等值匹配 WHERE value = REPLACE(REPLACE(列B, '[', ''), ']', '') )
该方案性能优秀,匹配逻辑严谨,适合中大数据量场景。
方案2:SQL Server 2016以下版本兼容方案
通过统一补充分隔符实现精准LIKE匹配,避免部分匹配问题:
SELECT * FROM 你的表名 WHERE -- 给列A移除方括号后前后都补充分号,统一内容的分隔符边界 ';' + REPLACE(REPLACE(列A, '[', ''), ']', '') + ';' -- 列B移除方括号后也包裹成分号+值+分号的格式进行模糊匹配 LIKE '%;' + REPLACE(REPLACE(列B, '[', ''), ']', '') + ';%'
该方案写法简洁,兼容低版本SQL Server,适合小数据量场景。
内容的提问来源于stack exchange,提问作者ParaDoX86
相关产品推荐
相关产品推荐

