高级 SQL Server LIKE 模式

问题描述 投票:0回答:2

我正在使用 SQL Server 2019 计算机和一个表,其中包含文件名和有关文件的其他详细信息的列表。该表中有超过 200 万行。

我们使用 .NET Framework 4.6 应用程序来查询此表。我们想根据这种模式过滤行,但我想不出一种编写方法。即使 chatGPT 似乎也无法编写它,但我觉得有一些方法可以做到这一点,但我缺少。我一直遇到的问题是,SQL Server 似乎没有一种方法来查找字符或不查找字符,有点像它是可选的。

图案:

  • 以三个数字开头,可以是破折号、下划线或什么都没有
  • 还有三个数字
  • 破折号、下划线或什么都没有
  • 还有三个数字
  • 然后什么都

应该有效的示例条目:

123-456789 somethnljdsflkjsdf.ext
123456789 newsomething.ext
123_456_789 jlkajsdfkl.ext

这是我到目前为止所想到的:

SELECT * 
FROM [#testingTable] AS [tt] 
WHERE [tt].[TestingValue] LIKE '012[_-]%325[_-]%020[_-]%000'
sql sql-server filter sql-server-2012
2个回答
0
投票

我会做这样的事情:

SELECT *
FROM [#testingTable] AS [tt]
WHERE REPLACE(REPLACE([tt].[TestingValue], '-', ''), '_', '') LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'

0
投票

你只有 4 种排列,所以可以把它们列出来

WHERE   TestingValue LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%'
     OR TestingValue LIKE '[0-9][0-9][0-9][_-][0-9][0-9][0-9][0-9][0-9][0-9]%'
     OR TestingValue LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][_-][0-9][0-9][0-9]%'
     OR TestingValue LIKE '[0-9][0-9][0-9][_-][0-9][0-9][0-9][_-][0-9][0-9][0-9]%'
© www.soinside.com 2019 - 2024. All rights reserved.