MSSQL Regex数据过滤字符串



我正在SQL Management Studio 2008 R2中尝试使用regex模式从表中筛选数据。

我的表"Asset"包含列"Asset_n",其中包含资产名称。目标是能够只过滤五种类型的名称:

  1. 仅包含五个数字字符,例如12345
  2. 仅包含六个数字字符,例如123456
  3. 包含五个数字字符,并以一个或两个非数字字符结尾,例如12345a12345ab
  4. 包含六个数字字符,并以一个或两个非数字字符结尾,例如。123456a123456ab

这是我的问题:

SELECT * FROM Asset WHERE asset_n LIKE [d{5,6}w{1,2}]

查询不返回任何内容。。。我在PowerShell中使用了相同的regex模式,它运行得很好。SQL对我来说是新事物,所以我真的不知道如何为SQL查询构建正则表达式模式。

提前感谢您的帮助。

SQL Server不支持LIKE参数中的regex,但是您可以使用以下查询执行您想要的操作:

SELECT * FROM Asset WHERE 
asset_n LIKE '[0-9][0-9][0-9][0-9][0-9]'
OR asset_n LIKE '[0-9][0-9][0-9][0-9][0-9][0-9]' 
OR asset_n like '[0-9][0-9][0-9][0-9][0-9][a-z]' OR asset_n like '[0-9][0-9][0-9][0-9][0-9][a-z][a-z]' 
OR asset_n like '[0-9][0-9][0-9][0-9][0-9][0-9][a-z]' OR asset_n like '[0-9][0-9][0-9][0-9][0-9][0-9][a-z][a-z]' 

试试这个:

select * from Asset 
where left(asset_n, 5) not like '%[^0-9]%' and 
      (SUBSTRING(asset_n, 6, 4) like '[0-9][a-z][a-z]' or
       SUBSTRING(asset_n, 6, 4) like '[0-9][a-z]' or
       SUBSTRING(asset_n, 6, 4) like '[0-9]' or
       SUBSTRING(asset_n, 6, 4) = '')

为什么是4?因为你有8个字符的最大长度,你想过滤那些长度较大的字符。

最新更新