如何在SQL Server中精准查询逗号分隔姓名列表中的指定姓名
问题原因
你当前的LIKE '%Mike%'写法是模糊匹配所有包含Mike子串的内容,第二行记录的Mikem包含Mike子串,所以也被命中,不符合你精准匹配逗号分隔列表中独立的Mike项的需求。
方案1:分隔符拼接匹配(无需拆分字符串,实现简单)
利用你存储的人名分隔符为, (逗号+空格)、每行行尾自带逗号的特点,给字段前拼接, 后匹配包含,@Person,的内容,写法如下:
DECLARE @Person nvarchar(200) SET @Person = 'Mike' SELECT * FROM [AdventureWorks2019].[dbo].[Person_Table] WHERE ', ' + Person LIKE '%,' + @Person + ',%'
方案2:使用STRING_SPLIT拆分后精准匹配(SQL Server 2016+支持,更规范)
SQL Server 2019原生支持STRING_SPLIT函数,可以把逗号分隔的内容拆分为独立行后做等值匹配,完全避免模糊匹配的误判问题:
DECLARE @Person nvarchar(200) SET @Person = 'Mike' SELECT DISTINCT t.* FROM [AdventureWorks2019].[dbo].[Person_Table] t CROSS APPLY STRING_SPLIT(REPLACE(t.Person, ' ', ''), ',') s WHERE TRIM(s.value) = @Person
最优长期方案
当前用单字段存储逗号分隔多值属于不符合数据库设计范式的实现,不仅查询性能差、容易出现匹配误判,也无法加索引优化。建议调整表结构,新增人员子表,每个人名单独存储为一行,和主表做关联查询,性能和可维护性都会大幅提升。
内容的提问来源于stack exchange,提问作者MisterXAGE_
相关产品推荐
相关产品推荐

