LIKE 探索条件の構文は次のとおりです。
expression [ NOT ] LIKE pattern [ ESCAPE escape-character ]
expression 検索される文字列。
pattern expression を検索するためのパターン。
escape-character アンダースコアやパーセント記号などの特殊文字をエスケープするために使用する文字。デフォルトのエスケープ文字は NULL 文字で、文字列リテラル内では '\x00' のように指定します。
LIKE 探索条件は、expression を pattern に一致させようとし、TRUE、FALSE、または UNKNOWN と評価されます。
expression が pattern に一致すれば、探索条件は TRUE と評価されます (NOT が指定されない場合)。expression または pattern が NULL 値の場合、探索条件は UNKNOWN と評価されます。NOT キーワードを使用すると探索条件の意味が逆になりますが、UNKNOWN は変わりません。
expression は、CHAR または NCHAR の文字列として解釈されます。expression の内容全体が一致に使用されます。同様に、pattern は、CHAR または NCHAR の文字列として解釈され、次の表のサポートされているワイルドカードをいくつでも含めることができます。
ワイルドカード | 一致するもの |
---|---|
_ (アンダースコア) | 任意の 1 文字。たとえば、a_ は ab と ac に一致しますが、a には一致しません。
|
% (パーセント記号) | 0 個以上の文字からなる任意の文字列。たとえば、bl% は bl と bla に一致します。
|
[] | 指定範囲内、または一連の指定文字の任意の 1 文字。たとえば、T[oi]m は Tom または Tim に一致します。
|
[^] | 指定範囲、または一連の指定文字に含まれない任意の 1 文字。たとえば、M[^c] は Mb と Md に一致しますが、Mc には一致しません。
|
その他すべての文字は正確に一致しなければなりません。
たとえば、次のような探索条件は、文字 a で始まり、末尾から 2 つ目の文字が b の name のローの場合、TRUE になります。
... name LIKE 'a%b_' |
escape-character を指定する場合は、シングルバイトの CHAR 文字または NCHAR 文字として評価される文字を指定します。エスケープ文字は、pattern 内のパーセント記号、アンダースコア、左側の角カッコ、またはその他のエスケープ文字の前に置くことができます。これは、特殊文字が特別な意味を持たないようにするためです。この方法でエスケープすると、パーセント記号はパーセント記号に一致し、アンダースコアはアンダースコアに一致します。
126 バイト以下のパターンは、すべてサポートされています。ワイルドカードを含まない、126 バイトを超えるパターンはサポートされていません。126 バイトを超えるワイルドカード文字を含むパターンは、パターンの内容によってサポートされることがあります。パターンの表現に使用されるバイト数は、パターンが CHAR か NCHAR かによって異なります。
検索対象 | 例 | その他の情報 |
---|---|---|
一連の文字 | LIKE 'sm[iy]th' |
検索対象の一連の文字は、角カッコ内にリストして指定します。この例では、探索条件は smith と smyth に一致します。 |
範囲内の文字 | LIKE '[a-r]ough' |
検索対象の文字範囲は、角カッコ内に範囲を書いて指定します。範囲の始めと終わりの間にハイフンを書きます。この例では、探索条件は bough と rough に一致しますが、tough には一致しません。 文字列の範囲 [a-r] は「a 以上 r 以下」と解釈され、データベースの照合では、> と < 演算子が実行されます。一致範囲の詳細については、LIKE、REGEXP、SIMILAR TO:文字の比較における相違点を参照してください。 範囲は、まず小さい方の値、次に大きい方の値を指定してください。たとえば、 |
文字範囲と一連の文字の結合 | ... LIKE '[a-rt]ough' |
角カッコ内で、文字範囲と一連の文字を結合できます。この例では、 パターン [a-rt] は、a ~ r の範囲に含まれる文字または t と一致する 1 文字と解釈されます。 |
範囲外の 1 文字 | ... LIKE '[^a-r]ough' |
脱字記号 (^) は、検索から除外する文字範囲を指定します。この例では、 脱字記号は、この記号以外のカッコ内の内容を否定します。たとえば、角カッコ [^a-rt] は、a ~ r の範囲に含まれない文字かつ t ではない 1 文字と解釈されます。 |
後続ブランクのある探索パターン | '90 ' 、'90[ ]' 、'90_' |
探索パターンに後続ブランクが含まれる場合、データベース・サーバではブランクが含まれる値に対してのみパターンが一致します。文字列へのブランクの埋め込みは行われません。たとえば、検索されている値が幅 3 文字以上の CHAR 型または VARCHAR 型カラムにあっても、'90 '、'90[ ]'、'90_' のパターンは、式 '90 ' には一致しますが、式 '90' には一致しません。 |
角カッコ内の任意の 1 文字は、その文字を指しています。たとえば、[a]
は、文字 a に一致します。[^]
は脱字記号、[%]
はパーセント記号 (パーセント記号は、このコンテキストではワイルドカードになりません)、[_]
はアンダースコア文字に一致します。また、[[]
は文字 [ に一致します。
その他の特殊なケースには、次のものがあります。
パターン [a-]
は、文字 a または - に一致します。
パターン []
は、一致する文字がないのでローを返すことはありません。
パターン [
または [abp-q
は、閉じカッコが欠けているため構文エラーを返します。
角カッコ内ではワイルドカードは使用できません。パターン [a%b]
は a、%、または b のいずれかを検出します。
脱字記号を使用しても、カッコ内の先頭になければ範囲を否定できません。パターン [a^b]
は a、^、または b のいずれかを検出します。
データベース照合が大文字と小文字を区別する場合は、探索条件でも大文字と小文字を区別します。大文字と小文字を区別する照合で大文字と小文字を区別しない検索を実行するには、大文字と小文字を両方指定します。たとえば、次の探索条件では、文字列 Bough、rough、TOUGH が true と評価されます。
LIKE '[a-zA-Z][oO][uU][gG][hH]' |
文字列単位で比較する等価演算子 (=) やその他の演算子とは異なり、比較が文字単位で実行されます。たとえば、UCA 照合 (照合が UCA に設定された CHAR または NCHAR) で比較が行われる場合、'A'='AE'
は true ですが、'A' LIKE 'AE'
は false です。
文字単位で比較する一致では、検索される式に含まれる各文字が 1 文字ごとに一致するか (照合の文字等価を使用します)、または LIKE 式のワイルドカードに一致する必要があります。
LIKE、SIMILAR TO、REGEXP における一致や評価範囲の動作の比較については、LIKE 探索条件、REGEXP 探索条件、SIMILAR TO 探索条件を参照してください。
LIKE 探索条件は、CHAR と NCHAR の文字列の比較に使用できます。この場合、共通データ型を使用して比較が行われるように、文字セット変換が実行されます。次に、文字単位の比較が実行されます。CHAR と NCHAR の比較を参照してください。
引用符で囲んだ値の前に N を付けることによって (たとえば、expression LIKE N'pattern'
)、expression または pattern を NCHAR 文字列リテラルとして指定できます。また、CAST 関数を使用して、CHAR または NCHAR にパターンをキャストすることもできます (たとえば、expression LIKE CAST(pattern AS datatype)
)。
文字列リテラルとCAST 関数 [データ型変換]を参照してください。
ブランクが埋め込まれたデータベースの場合、expression と pattern の一致では、左から右の順に文字単位の比較が行われるため、LIKE パターンのセマンティックが変わることはありません。評価時に、expression または pattern の値に追加のブランクは埋め込まれません。このため、式 a1
はパターン a1 に一致しますが、パターン 'a1 ' (a1 の後ろにスペースがある) または a1_ には一致しません。
LIKE 探索条件は、ANSI SQL/2003 標準のコア機能です。
SQL Anywhere では、ANSI SQL/2003 の機能 F281 をサポートしています。これにより、パターンとエスケープ式を実行時に評価される任意の式にできます。機能 F281 を使用すると、expression を単純なカラム参照よりも複雑な式にすることもできます。
角カッコ [] に含まれる文字範囲と一連の文字の使用はベンダ拡張です。
SQL Anywhere では、ANSI SQL/2003 の機能 T042 をサポートしています。これにより、LIKE 探索条件で LONG VARCHAR 値の文字列式を参照できます。
NCHAR の文字列式またはパターンを指定する LIKE 探索条件は、ANSI SQL/2003 標準の機能 F421 です。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |