MSSQL Regex数据过滤器

时间:2016-05-17 19:14:24

标签: sql sql-server regex

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

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

  1. 仅包含五个数字字符,例如12345
  2. 仅包含六个数字字符,例如123456
  3. 包含五个数字字符,以一个或两个数字字符结尾,例如12345a12345ab
  4. 包含六个数字字符,以一个或两个数字字符结尾,例如 123456a123456ab
  5. 这是我的问题:

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

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

    提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

SQL Server不支持LIKE参数中的正则表达式,但您可以使用以下查询执行所需操作:

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]' 

答案 1 :(得分:0)

试试这个:

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个字符的最大长度,你想要过滤那些长度更大的字符。