SQL Server中如何在LIKE语法中使用@变量实现字符串匹配查询
MSSQL 查询字段值包含在指定字符串中的实现方法
核心逻辑纠正
你原有的SQL写法逻辑倒置了,你需要的是判断@VALUE字符串中是否包含name字段的内容,而非name字段包含整个@VALUE字符串。
基础实现(无精确单词匹配要求)
如果允许部分匹配(例如名字为Jo也会匹配到字符串里的Joe),直接用以下两种写法即可:
DECLARE @VALUE VARCHAR(2000) = 'Joe and Bill and Michael are my friends' -- 写法1:用CHARINDEX函数,性能优于LIKE SELECT * FROM my_friends WHERE CHARINDEX(name, @VALUE) > 0 -- 写法2:用LIKE实现 SELECT * FROM my_friends WHERE @VALUE LIKE '%' + name + '%'
精确匹配拆分后的人名(避免部分匹配)
如果需要严格只匹配and分隔的独立人名,避免部分匹配的误判,MSSQL 2016及以上版本可以用STRING_SPLIT实现:
DECLARE @VALUE VARCHAR(2000) = 'Joe and Bill and Michael are my friends' -- 先将分隔符' and '替换为单字符分隔符,再拆分 SELECT DISTINCT f.* FROM my_friends f INNER JOIN STRING_SPLIT(REPLACE(@VALUE, ' and ', '|'), '|') s ON f.name = s.value -- 过滤掉非人名的字符串片段(可选,根据实际需求调整) WHERE s.value NOT IN ('are', 'my', 'friends')
低版本MSSQL(2016以下)适配
如果使用的是不支持STRING_SPLIT的低版本MSSQL,可以自行实现一个字符串拆分表值函数,再替换上述代码中的STRING_SPLIT部分即可。
内容的提问来源于stack exchange,提问作者Ahmet Çöl
相关产品推荐
相关产品推荐

