次の方法で共有


[NOT] LIKE (Entity SQL)

指定された文字列 String が指定されたパターンと一致するかどうかを判断します。

[NOT] LIKE ( expression )

引数

  • match
    結果が String になる Entity SQL 式。
  • pattern
    指定された String に一致するパターン。
  • escape
    エスケープ文字。
  • NOT
    LIKE の結果を否定することを指定します。

戻り値

string がパターンに一致する場合は true、一致しない場合は false

解説

LIKE 演算子を使用する Entity SQL 式は、フィルタ条件として等価性を使用する式と同様に評価されます。ただし、LIKE 演算子を使用する Entity SQL 式には、リテラル文字とワイルドカード文字の両方を含めることができます。

次の表では、パターン string の構文について説明します。

ワイルドカード文字 説明

%

0 個またはそれ以上の文字で構成される任意の string です。

title like '%computer%' と指定すると、タイトルに "computer" という単語が含まれるすべてのタイトルが検索されます。

_ (アンダースコア)

任意の 1 文字です。

firstname like '_ean' と指定すると、"ean" で終わる 4 文字のすべてのファースト ネーム (Dean や Sean など) が検索されます。

[ ]

指定した範囲 ([a-f]) またはセット ([abcdef]) にある任意の 1 文字です。

lastname like '[C-P]arsen' と指定すると、Carsen や Larsen などのように、C ~ P の任意の 1 文字で始まり、"arsen" で終わる姓が検索されます。

[^]

指定した範囲 ([^a-f]) またはセット ([^abcdef]) にない任意の 1 文字です。

lastname like 'de[^l]%' と指定すると、"de" で始まり、次の文字が "l" でないすべての姓が検索されます。

[!メモ]

Entity SQL の LIKE 演算子および ESCAPE 句は、System.DateTime または System.Guid 値には適用できません。

LIKE では、ASCII パターン検索と Unicode パターン検索がサポートされています。すべてのパラメータが ASCII 文字の場合は、ASCII パターン検索が行われます。1 つまたは複数の引数が Unicode の場合は、すべての引数が Unicode に変換され、Unicode パターン検索が行われます。LIKE で Unicode を使用する場合、後続する空白は意味を持ちます。しかし、Unicode 以外のデータの場合、後続する空白は意味を持ちません。Entity SQL のパターン文字列構文は、Transact-SQL のパターン文字列構文と同じです。

パターンは、標準の文字とワイルドカード文字を含むことができます。パターン検索時に、標準の文字は string に指定された文字と正確に一致する必要があります。しかし、ワイルドカード文字は文字列の任意の部分と一致することができます。ワイルドカード文字を使用する場合、LIKE 演算子は = や != などの文字列比較演算子よりも柔軟です。

[!メモ]

特定のプロバイダを対象とする場合は、プロバイダ固有の拡張機能を使用できます。ただし、たとえばコンストラクタの扱いは、プロバイダによって異なる場合があります。SqlServer では、[first-last] および [^first-last] のパターンがサポートされています。前者は先頭と末尾の間の 1 文字が完全に一致し、後者は先頭と末尾の間以外の 1 文字が完全に一致します。

エスケープ

前のセクションの表で説明しているように、ESCAPE 句を使用することで、1 文字以上の特殊なワイルドカード文字を含む文字列を検索できます。たとえば、複数のドキュメントのタイトルにリテラル "100%" が含まれており、そのドキュメントすべてを検索するとします。パーセント (%) 文字はワイルドカード文字であるため、検索を正常に実行するには Entity SQL ESCAPE 句を使用してエスケープする必要があります。このフィルタの例は次のとおりです。

"title like '%100!%%' escape '!'"

この検索式では、感嘆符文字 (!) の直後のパーセント ワイルドカード文字 (%) は、ワイルドカード文字としてではなく、リテラルとして処理されます。Entity SQL ワイルドカード文字および角かっこ ([ ]) 文字を除き、任意の文字をエスケープ文字として使用できます。前の例では、感嘆符 (!) 文字はエスケープ文字です。

次の 2 つの Entity SQL クエリでは、LIKE および ESCAPE 演算子を使用して、指定された文字列が指定されたパターンと一致するかどうかを判断します。最初のクエリは、文字列 Down_ で始まる Name を検索します。アンダースコア (_) はワイルドカード文字であるため、このクエリは ESCAPE オプションを使用します。ESCAPE オプションを指定しないと、単語 Down の後にアンダースコア文字以外の 1 文字で始まる Name 値もクエリで検索してしまいます。このクエリは、AdventureWorks Sales Model に基づいています。このクエリをコンパイルして実行するには、次の手順を実行します。

  1. PrimitiveType 結果を返すクエリの実行方法 (EntityClient)」の手順に従います。

  2. 次のクエリを引数として ExecutePrimitiveTypeQuery メソッドに渡します。

// LIKE and ESCAPE
// If an AdventureWorksEntities.Product contained a Name 
// with the value 'Down_Tube', the following query would find that 
// value.
Select value P.Name FROM AdventureWorksEntities.Product 
    as P where P.Name LIKE 'DownA_%' ESCAPE 'A'

// LIKE
Select value P.Name FROM AdventureWorksEntities.Product 
    as P where P.Name like 'BB%'

参照

概念

比較演算子 (Entity SQL)
Entity SQL リファレンス