我需要写一个REGEX来排除以下代码
D57 D59 D60 D61 D62X D63 D64 D69 D89 E85
这是我一直在使用的SQL块。使用额外的括号和OR运算符必须有更好的方法吗?
AND SUBSTRING(CODE, 1, 3) NOT LIKE 'D5[79]'
AND SUBSTRING(CODE, 1, 3) NOT LIKE 'D6[0-49]'
AND SUBSTRING(CODE, 1, 3) NOT IN ('D89','E85')
答案 0 :(得分:1)
如果DBA允许SQLCLR,您可以添加执行REGEX的功能您可以查看: Use-RegEx-in-SQL-with-CLR-Procs.
您可以同样使用TSQL来解析和排除代码。要解析代码,您可以使用各种字符串分割器。退房:Split strings the right way – or the next best way在我的示例中,我创建了一个包含代码的表,然后使用带有NOT IN的拆分器功能来排除代码。
--create Table
CREATE TABLE [dbo].[Codes](
[ID] [int] NULL,
[Item] [varchar](6) NULL
) ON [PRIMARY]
--insert values
INSERT INTO [dbo].[Codes]([ID], [Item])
SELECT 1, N'A6' UNION ALL
SELECT 2, N'D60' UNION ALL
SELECT 3, N'G56' UNION ALL
SELECT 4, N'A34' UNION ALL
SELECT 5, N'D61'
--setup test
DECLARE @inString VARCHAR(100)
SET @inString = 'D57 D59 D60 D61 D62X D63 D64 D69 D89 E85'
SELECT *
FROM Codes
WHERE item NOT IN (
SELECT Item
FROM dbo.SplitStrings_Moden(@inString, N' ')
)