You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:27:03