0

我需要编写一个正则表达式来排除以下代码

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')
4

1 回答 1

1

如果您的 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' ')
            )
于 2013-10-24T17:50:49.897 回答