我正在尝试使用SQL Management Studio 2008 R2中的regex模式从我的表中过滤数据。
我的表“资产”包含“Asset_n”列,其中包含资产名称。 目标是只能过滤五种类型的名称:
12345
123456
12345a
或12345ab
123456a
或123456ab
这是我的问题:
SELECT * FROM Asset WHERE asset_n LIKE [\d{5,6}\w{1,2}]
查询没有返回任何内容......我在PowerShell中使用了相同的正则表达式模式,它运行良好。 SQL对我来说是新的,所以我不知道如何为SQL查询构建我的正则表达式模式。
提前感谢您的帮助。
答案 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个字符的最大长度,你想要过滤那些长度更大的字符。