0

次のコードを除外するには、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')
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 に答える