SQL Server 2019 LIKE模式匹配求助:按规则筛选文件名
适配需求的SQL Server查询语句
需求回顾
需要筛选以3个数字开头,后续依次为:
- 可选的连字符(-)、下划线(_)或无分隔符
- 3个数字
- 可选的连字符(-)、下划线(_)或无分隔符
- 3个数字
- 末尾可以是任意内容的字符串
问题分析
你当前的语句存在几个问题:
- 硬编码了固定数字(如012、325),无法匹配任意3位数字
- 使用
%会匹配中间任意字符,不符合仅允许指定分隔符的要求 - 结尾固定为000,不满足“后续可为任意内容”的规则
解决方案
方案1:使用REGEXP_LIKE(SQL Server 2019及以上推荐)
SQL Server 2019支持正则表达式匹配,写法更简洁直观:
SELECT * FROM [#testingTable] AS [tt] WHERE REGEXP_LIKE([tt].[TestingValue], '^[0-9]{3}[-_]?[0-9]{3}[-_]?[0-9]{3}.*')
正则表达式各部分说明:
^:锚定字符串开头[0-9]{3}:匹配任意3位数字[-_]?:匹配0个或1个连字符/下划线(实现“可选分隔符”).*:匹配任意长度的任意字符(包含0个,即末尾可以无内容)
方案2:使用LIKE组合(兼容旧版本)
如果需要兼容不支持正则的SQL Server版本,可以用LIKE的多条件组合实现:
SELECT * FROM [#testingTable] AS [tt] WHERE -- 无任何分隔符:连续9位数字开头 [tt].[TestingValue] LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%' -- 仅第一个位置有分隔符 OR [tt].[TestingValue] LIKE '[0-9][0-9][0-9][-_][0-9][0-9][0-9][0-9][0-9][0-9]%' -- 仅第二个位置有分隔符 OR [tt].[TestingValue] LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][-_][0-9][0-9][0-9]%' -- 两个位置都有分隔符 OR [tt].[TestingValue] LIKE '[0-9][0-9][0-9][-_][0-9][0-9][0-9][-_][0-9][0-9][0-9]%'
内容的提问来源于stack exchange,提问作者Chandler R Reeves
相关产品推荐
相关产品推荐

