web-dev-qa-db-ja.com

SQL Server 2005で複数の値を持つ同様の条件を使用する方法

Nvarchar(1000)列の一部のテキストマッチングに基づいてレコードを除外する必要があります。テーブルには40万を超えるレコードがあり、増加しています。今のところ、Like条件を使用しています:-

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

回避策はありますか?

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

これにより、テキストにA1、B1、C1、D1、...が含まれているかどうかが確認されます.

SQL Serverでの Like条件の使用に関する参照

8
John Hartsock

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

SELECT 
    *
FROM
    table_01
WHERE
    SUBSTRING(Text,1,2) in ('B1','C1','D1')
5
Nusret Zaman

msdn[〜#〜] like [〜#〜]を見てください。

より多くの詳細を1つの[〜#〜] like [〜#〜]句に組み合わせることにより、フィルター数を減らすことができます。

SELECT 
    *
FROM
    table_01
WHERE
    Text like '%[ABCD]1%'
4
msms

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

0
Lamak

SQL Server ProfilerトレーステンプレートのDatabaseName列のフィルターで2つの異なるデータベースを許可できるように、これを行う必要がありました。

できることは、Like句の本文に入力することだけです。

John Hartscockの回答 の参照を使用して、like句が一種の限定的な正規表現パターンを使用していることを発見しました。

OPのシナリオでは、 MSMSがソリューションを持っています です。

データベースABCOne、ABCTwo、およびABCThreeが必要だとすると、各文字について本質的に独立したホワイトリストが何であるかがわかります。

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

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

または、[^]演算子を使用して、許可されない文字のブラックリストを表示します。

0
DCShannon