我需要编写一个正则表达式来排除以下代码
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')
我需要编写一个正则表达式来排除以下代码
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')
如果您的 DBA 允许 SQLCLR,您可以添加一个函数来执行 REGEX 您可以查看: Use-RegEx-in-SQL-with-CLR-Procs。
您同样可以使用 TSQL 来解析和排除代码。要解析代码,您可以使用任何种类的字符串拆分器。查看:以正确的方式拆分字符串 - 或下一个最佳方式在我的示例中,我创建了一个带有代码的表,然后使用带有 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' ')
)