あなたの分割文字列リテラルであるので、あなたは、真の正規表現を必要としません。 SQL Serverの2017年には、これは動作するはずです(テストしていません):
SELECT STRING_AGG([value], ',')
FROM STRING_SPLIT('Cytomegalovirus Nucleoside Analog DNA Polymerase Inhibitor [EPC],DNA Polymerase Inhibitors [MoA],Nucleoside Analog [Chemical/Ingredient],Nucleoside Analog Antiviral [EPC]', ',')
WHERE [value] LIKE '%\[EPC\]%' ESCAPE '\'
のSQL Server 2016には、(テスト)我々はSTRING_AGG
欠けているが、我々はSTRING_SPLIT
を持っているので、これは動作します:
SELECT STUFF((
SELECT ',' + [value]
FROM STRING_SPLIT('Cytomegalovirus Nucleoside Analog DNA Polymerase Inhibitor [EPC],DNA Polymerase Inhibitors [MoA],Nucleoside Analog [Chemical/Ingredient],Nucleoside Analog Antiviral [EPC]', ',')
WHERE [value] LIKE '%\[EPC\]%' ESCAPE '\'
FOR XML PATH('')
), 1, 1, '')
以前のバージョンでは、ネイティブの文字列分割がうまく実行されていないため、これが背後で大きな苦痛になりました。 this oneのように、多くの質問がこれを処理します。連結のためにFOR XML PATH
トリックと組み合わせてこれらのソリューションのいずれかを使用すると動作します。
また、CLR関数では、よりクリーンで高速な(正規表現でも)CLR関数を実装できますが、それらを実装する方が複雑です。 This questionはそのための良いスタートです。
最後に、SQLでこれらの操作を実行する必要がある場合、これは通常、データベース設計が不足していることを示しています。特に、コンマ区切りの値は、EPC BIT NOT NULL
列(またはより一般的にはCategoryID INT REFERENCES Categories(ID)
列)の行に分かれている必要があります。また、クライアントコードのデータを効率的に操作する方法で考慮する必要がありますデータベース。ここでは正規化がキーワードです。
クライアント側で行うか、CLR関数を記述してください(正規表現とのマッチング方法については、オンラインでたくさんの例があります)。これを純粋なT-SQLで行うことは可能ですが、苦しみの練習です。 (SQL Server 2017を使用している場合を除き、 'STRING_SPLIT'と' STRING_AGG'は非常に簡単に実行できます) –
私の例を使ってT-SQLコードを提供してください。 –