Nvarchar(1000)列の一部のテキストマッチングに基づいてレコードを除外する必要があります。テーブルには40万を超えるレコードがあり、増加しています。今のところ、Like条件を使用しています:-
SELECT
*
FROM
table_01
WHERE
Text like '%A1%'
OR Text like '%B1%'
OR Text like '%C1%'
OR Text like '%D1%'
回避策はありますか?
SELECT
*
FROM
table_01
WHERE
Text like '%[A-Z]1%'
これにより、テキストにA1、B1、C1、D1、...が含まれているかどうかが確認されます.
SQL Serverでの Like条件の使用に関する参照
サブ文字列の正確な位置がわかっている場合は、以下を試すことができます。
SELECT
*
FROM
table_01
WHERE
SUBSTRING(Text,1,2) in ('B1','C1','D1')
msdn の[〜#〜] like [〜#〜]を見てください。
より多くの詳細を1つの[〜#〜] like [〜#〜]句に組み合わせることにより、フィルター数を減らすことができます。
SELECT
*
FROM
table_01
WHERE
Text like '%[ABCD]1%'
SQL Server ProfilerトレーステンプレートのDatabaseName
列のフィルターで2つの異なるデータベースを許可できるように、これを行う必要がありました。
できることは、Like
句の本文に入力することだけです。
John Hartscockの回答 の参照を使用して、like句が一種の限定的な正規表現パターンを使用していることを発見しました。
OPのシナリオでは、 MSMSがソリューションを持っています です。
データベースABCOne、ABCTwo、およびABCThreeが必要だとすると、各文字について本質的に独立したホワイトリストが何であるかがわかります。
Like ABC[OTT][NWH][EOR]%
これは、どの文字列セットにも簡単に拡張できます。最後のパターンはABCOwe、ABCTnr、またはABCOneHippotamusにも一致しますが、可能な値の制限されたセットをフィルタリングしている場合は、それを機能させることができる可能性が高くなります。
または、[^]
演算子を使用して、許可されない文字のブラックリストを表示します。