パターン一致は、文字データを識別する便利な方法です。SQL では、パターンの検索には LIKE キーワードを使用します。パターン一致では、ワイルドカード文字を使用して、文字のさまざまな組み合わせに対応します。
LIKE キーワードは、その後に入力された文字列がマッチング・パターンであると指定します。LIKE は文字データとともに使用します。
LIKE の構文は、次のとおりです。
expression [ NOT ] LIKE match-expression
一致する式は、次の特殊記号を含むマッチ式と比較されます。
記号 | 意味 |
---|---|
% | 文字数が 0 以上の文字列に一致します。 |
_ | 文字 1 個に一致します。 |
[specifier] |
カッコ内の指定子の形式は、次のとおりです。
範囲 [a-f] と、セット [abcdef] と [fcbdae] は、同じ値セットを返します。 |
[^specifier] | 指定子の前にある脱字記号 (^) は非包含を表します。[^a-f] は a ~ f の範囲ではないとの意味で、[^a2bR] は a、2、b、R ではないとの意味です。 |
カラム・データを、定数、変数、またはテーブルに示されているワイルドカード文字を含むその他のカラムに一致させることができます。定数を使用するときは、マッチ文字列と文字列を一重引用符で囲みます。
次の例はすべて、Contacts テーブルの Surname カラムで LIKE を使用しています。クエリの形式は次のとおりです。
SELECT Surname FROM Contacts WHERE Surname LIKE match-expression; |
最初の例は次のように入力します。
SELECT Surname FROM Contacts WHERE Surname LIKE 'Mc%'; |
マッチ式 | 説明 | 検索結果 |
---|---|---|
'Mc%' | Mc で始まるすべての名前を検索します。 | McEvoy |
'%er' | er で終わるすべての名前を検索します。 | Brier, Miller, Weaver, Rayner |
'%en%' | en を含むすべての名前を検索します。 | Pettengill, Lencki, Cohen |
'_ish' | ish で終わるすべての 4 文字の名前を検索します。 | Fish |
'Br[iy][ae]r' | Brier、Bryer、Briar、または Bryar を検索します。 | Brier |
'[M-Z]owell' | M ~ Z の範囲の 1 文字で始まり、owell で終わるすべての名前を検索します。 | Powell |
'M[^c]%' | M で始まり、2 番目の文字が c ではないすべての名前を検索します。 | Moore, Mulley, Miller, Masalsky |
ワイルドカード文字を LIKE なしで使用すると、パターンとは解釈されず、「文字列リテラル」と解釈されます。つまり、ワイルドカード文字そのものの値を表すことになります。次のクエリは、415% の 4 文字だけから成る電話番号を検出しようとします。415 で始まる電話番号は検出しません。
SELECT Phone FROM Contacts WHERE Phone = '415%'; |
文字列リテラルも参照してください。
LIKE は、日付フィールド、時刻フィールド、文字データに対して使用できます。日付値や時刻値で LIKE を使用すると、日付は標準的な DATETIME フォーマットに変換され、次に VARCHAR に変換されます。
DATETIME 値を検索するときに LIKE を使用する場合の特徴は、日付エントリと時刻エントリにはさまざまな日付部分があるため、検索に成功するには等号テストを慎重に書き込まなければならないということです。
たとえば、カラム arrival_time に値 9:20 と現在の日付を入力した場合、エントリに時刻だけではなく日付も格納されているため、次の句は値の検索に失敗します。
WHERE arrival_time = '9:20' |
しかし、次の句なら 9:20 という値を検出します。
WHERE arrival_time LIKE '%09:20%' |
LIKE とともに使用できるのと同じワイルドカード文字を、NOT LIKE にも使用できます。次のクエリのいずれかを使用すると、Contacts テーブル内で市外局番が 415 ではない電話番号をすべて検索します。
SELECT Phone FROM Contacts WHERE Phone NOT LIKE '415%'; |
SELECT Phone FROM Contacts WHERE NOT Phone LIKE '415%'; |
LIKE とともに使用できるもう 1 つの特殊文字は _ (アンダースコア) 文字です。この特殊文字は、厳密に 1 つの文字と対応します。たとえば、パターン 'BR_U%' は、BR で始まり 4 番めの文字が U であるすべての名前と対応します。Braunでは、_ は文字 A に対応し、% は N に対応します。LIKE 探索条件を参照してください。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |