适应SQL的REGEX

时间:2013-10-24 16:24:46

标签: sql-server regex tsql

我需要写一个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')

1 个答案:

答案 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' ')
            )