11

nvarchar(1000) 列で一致するテキストに基づいてレコードを除外する必要があります。テーブルには 40 万件以上のレコードがあり、増え続けています。今のところ、私は Like 条件を使用しています:-

SELECT 
    *
FROM
    table_01
WHERE
    Text like '%A1%'
    OR Text like '%B1%'
    OR Text like '%C1%'
    OR Text like '%D1%'

望ましい回避策はありますか?

4

5 に答える 5

8
SELECT 
    *
FROM
    table_01
WHERE
    Text like '%[A-Z]1%'

これにより、テキストに A1、B1、C1、D1、... が含まれているかどうかがチェックされます。

SQL Server での Like 条件の使用に関するリファレンス

于 2011-01-31T20:40:39.377 に答える
6

サブ文字列の正確な位置がわかっている場合は、次のことを試すことができます。

SELECT 
    *
FROM
    table_01
WHERE
    SUBSTRING(Text,1,2) in ('B1','C1','D1')
于 2012-10-20T06:30:21.470 に答える
4

msdnのLIKEを見てください。

詳細を 1 つのLIKE句に結合することで、フィルターの数を減らすことができます。

SELECT 
    *
FROM
    table_01
WHERE
    Text like '%[ABCD]1%'
于 2011-01-31T20:42:12.993 に答える
0

これを行う必要があったのDatabaseNameは、SQL Server プロファイラー トレース テンプレートの列のフィルターで 2 つの異なるデータベースを許可できるようにするためです。

できることは、Like句の本文を埋めることだけです。

John Hartscock's answerの参照を使用して、like 句が一種の限定された正規表現パターンを使用していることがわかりました。

OP のシナリオでは、MSMS には解決策があります

データベース ABCOne、ABCTwo、および ABCThree が必要であると仮定すると、各文字に対して本質的に独立したホワイトリストを作成します。

Like ABC[OTT][NWH][EOR]%

これは、任意の文字列セットに簡単に拡張できます。最後のパターンは ABCOwe、ABCTnr、または ABCOneHippotamus にも一致しますが、可能な値の限られたセットをフィルタリングしている場合は、それを機能させる可能性が高くなります。

または、演算子を使用して[^]、受け入れられない文字のブラックリストを提示することもできます。

于 2014-10-22T22:42:41.390 に答える
0

テーブルのその列にを作成できる場合FULLTEXT INDEX(パフォーマンスとスペースに関する多くの調査を前提としています)、テキスト マッチングのパフォーマンスが大幅に向上する可能性があります。このリンクにアクセスして が何FULLTEXT SEARCHであるかを確認し、このリンクにアクセスして の作成方法を確認できますFULLTEXT INDEX

于 2011-01-31T20:39:47.940 に答える