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

SQL Server中LIKE不支持部分正则语法,需修改正则表达式吗?

解决SQL Server LIKE不支持正则语法的问题

嘿,我来帮你搞定这个问题!先给你划个重点:SQL Server里的LIKE根本不是标准正则表达式!它只有自己那套简单的通配符规则(比如%、_、[]),你用的{}(指定重复次数)和|(或逻辑)都是正则专属语法,LIKE完全不认,这就是你查不到结果的核心原因。

你的正则规则拆解与转换

先看你给出的ProductIdFormat正则:[0-9]{8}|[0-9]{7}|[c-dC-D][0-9][0-9][a-zA-Z][a-zA-Z][0-9][0-9][0-9][0-9],它其实是三个独立规则的“或”逻辑,我们需要把每个规则转换成LIKE能识别的格式,再用OR连接:

  1. 匹配8位数字:正则[0-9]{8} → LIKE格式:'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'(直接写8个[0-9]表示8位数字)
  2. 匹配7位数字:正则[0-9]{7} → LIKE格式:'[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
  3. 匹配C10PA0024这类格式:正则[c-dC-D][0-9][0-9][a-zA-Z][a-zA-Z][0-9][0-9][0-9][0-9] → 这个部分LIKE能直接识别,因为[]范围匹配是支持的,直接保留即可。

可直接运行的查询语句

把转换后的规则用OR连接,替换你原来的查询,就能得到正确结果了:

SELECT ProductId 
FROM Company 
WHERE 
    -- 匹配8位数字(比如03555521)
    ProductId LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
    -- 匹配7位数字
    OR ProductId LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
    -- 匹配C10PA0024这类格式
    OR ProductId LIKE '[c-dC-D][0-9][0-9][a-zA-Z][a-zA-Z][0-9][0-9][0-9][0-9]'

如果ProductIdFormat是表中存储的字段

如果你的ProductIdFormat是存在表中的字段(不是硬编码的字符串),可以用动态SQL来自动转换正则语法,比如:

DECLARE @likeSql NVARCHAR(MAX)
-- 先替换正则里的重复次数语法
SELECT @likeSql = REPLACE(REPLACE(ProductIdFormat, '{8}', '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'), '{7}', '[0-9][0-9][0-9][0-9][0-9][0-9][0-9]')
-- 再替换正则的或逻辑为SQL的OR条件
SET @likeSql = REPLACE(@likeSql, '|', ''' OR ProductId LIKE ''')
-- 拼接完整查询语句
SET @likeSql = 'SELECT ProductId FROM Company WHERE ProductId LIKE ''' + @likeSql + ''''
-- 执行动态SQL
EXEC sp_executesql @likeSql

⚠️ 注意:动态SQL要注意SQL注入风险,如果ProductIdFormat的内容不可控,需要额外做安全校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:47:42