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

SQL Server中精准匹配特定子字符串的SQL查询方法求助

解决SQL Server中精准匹配分隔子串的问题

针对你需要在点分隔的字符串列中精准匹配完整子串的需求,这里提供几种可行的方案:

方法1:使用STRING_SPLIT分割字符串(SQL Server 2016+)

这种方法直观易懂,将reference列按点分割为多个片段,直接筛选包含完全匹配目标子串的行:

DECLARE @target VARCHAR(50) = 'VB1234'; -- 替换为你要查询的子串

SELECT DISTINCT t.*
FROM your_table t
CROSS APPLY STRING_SPLIT(t.reference, '.') s
WHERE s.value = @target;

说明:

  • STRING_SPLIT会把每个reference值按.拆分成独立的片段
  • 通过CROSS APPLY将拆分后的片段和原表行关联
  • DISTINCT确保同一行不会因为多个匹配片段重复返回
  • 替换@target为VB8455时,会自动匹配第3、4条记录

方法2:使用LIKE多模式匹配

如果你的SQL Server版本不支持STRING_SPLIT,可以通过组合LIKE的三种匹配场景来覆盖所有可能的子串位置:

DECLARE @target VARCHAR(50) = 'VB1234';

SELECT *
FROM your_table
WHERE 
    -- 场景1:子串在开头(下划线之后,点之前)
    reference LIKE '_' + @target + '.%'
    -- 场景2:子串在中间(前后都是点)
    OR reference LIKE '%.' + @target + '.%'
    -- 场景3:子串在结尾(点之后到字符串末尾)
    OR reference LIKE '%.' + @target;

说明:

  • 针对你的示例数据:
    • 查询VB1234时,第2条符合场景1,第4条符合场景3,会被返回
    • 查询VB8455时,第3条符合场景3,第4条符合场景1,会被返回
  • 这种方法不需要额外函数,兼容性更好

方法3:使用正则表达式匹配(SQL Server 2017+)

利用REGEXP_LIKE函数,通过正则规则匹配完整的分隔片段:

DECLARE @target VARCHAR(50) = 'VB1234';

SELECT *
FROM your_table
WHERE REGEXP_LIKE(reference, N'(^_|[.])' + @target + N'([.]|$)');

说明:

  • 正则表达式(^_|[.])表示子串的前缀是开头的下划线或者点
  • ([.]|$)表示子串的后缀是点或者字符串结尾
  • 这样能确保匹配的是完整的分隔片段,不会出现部分匹配的情况

内容的提问来源于stack exchange,提问作者megabytes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 09:22:23