LIKE および ILIKE
LIKE および ILIKE を使用すると、文字ベースの列データ内でパターン検索が可能になります。これらの構文はまったく同じですが、LIKE は大文字と小文字を区別するのに対し、ILIKE は区別しません。
ILIKE のサポートは Zen v15 SP1 で導入されました。特定の条件下では、LIKE よりもクエリ パフォーマンスがよくなる場合があります。
構文
WHERE 式 [NOT] <LIKE | ILIKE> 値
備考
LIKE 式または ILIKE 式の右辺のパターン値は、単純な文字定数、USER キーワード、または(ストアド プロシージャ外では)疑問符で示される、実行時に供給される動的パラメーターである必要があります。動的パラメーターは、SQL Editor 内ではサポートされません。アプリケーション コードでのみサポートされます。
列の値内の 0 個以上の文字と一致させるには、パターンの中でパーセント記号ワイルドカードを使用します。1 文字と一致させるには、アンダースコア ワイルドカードを使用します。どちらのワイルドカードも、パターン内で複数回使用できます。これらのワイルドカード記号をリテラル文字として一致させるには、記号の前に円記号を使用します。次の表は、特殊文字の使用に関する詳細を示しています。
文字 | 用途 |
---|
パーセント記号 "%" | ワイルドカード:0 個以上の文字と一致します。 |
アンダースコア "_" | ワイルドカード:1 つの文字と一致します。 |
円記号 "\" | 実際のワイルドカード文字そのものと一致させるために、後続のワイルドカード文字はリテラル文字であると知らせるためのエスケープ文字。円記号と一致させるには、円記号を 2 つ入力します。たとえば、列値内の "%" と一致させるには "\%" を使用します。 |
2 つの一重引用符 "" | 結果文字列内の一重引用符と一致させるには、2 つの一重引用符を間に空白を入れないで使用する必要があります。たとえば、データベースの列に "Jim's house" という値が含まれている場合、WHERE 句で LIKE 'Jim''s house' を指定すると、このパターンと一致させることができます。二重引用符はパターン文字列内では特殊文字でないため、すべての文字や数字と同様に使用できます。 |
LIKE の例
このセクションでは LIKE の使用を示します。ILIKE との比較のために、
ILIKE の例を参照してください。
次の例は、5 文字長で、かつ中央の 3 文字が abc であるすべての列値と一致します。
SELECT Building_Name FROM Room WHERE Building_Name LIKE '_abc_'
============
次の例は、円記号を含むすべての列値と一致します。
SELECT Building_Name FROM Room where Building_Name LIKE '%\\%'
============
次の例は、パーセント記号で始まる列値以外のすべての列値と一致します。
SELECT Building_Name FROM Room where Building_Name NOT LIKE '\%%'
============
次の例は、1 つまたは複数の一重引用符を含むすべての列値と一致します。
SELECT Building_Name FROM Room where Building_Name LIKE '%''%'
============
次の例は、2 番目の文字が二重引用符であるすべての列値と一致します。
SELECT Building_Name FROM Room where Building_Name LIKE '_"%'
============
次の例では、Building_Name 列が入力変数 :rname に格納された文字列を含み、Type 列が入力変数 :rtype に格納された文字列を含む行を返す、ストアド プロシージャが作成されます。
CREATE PROCEDURE room_test(IN :rname CHAR(20), IN :rtype CHAR(20))
RETURNS(Building_Name CHAR(25), "Type" CHAR(20));
BEGIN
DECLARE :like1 CHAR(25);
DECLARE :like2 CHAR(25);
SET :like1 = '%' + :rname + '%';
SET :like2 = '%' + :rtype + '%';
SELECT Building_Name, "Type" FROM Room WHERE Building_Name LIKE :like1 AND "Type" LIKE :like2;
END;
次のステートメントを上記のストアド プロシージャ内に記述した場合、LIKE 演算子の右辺の式が原因で、構文エラーが発生します。右辺は単純な定数でなければなりません。
次の構文は正しくないため、失敗します。
SELECT Building_Name, "Type" from Room WHERE Building_Name LIKE '%' + :rname + '%';
ILIKE の例
次の 2 つの LIKE と ILIKE の例は、Demodata サンプル データベースから同じ結果を返します。ILIKE ステートメントでは、UPPER 文字列関数を使用する必要はありません。
SELECT First_Name, Last_Name, Email_Address from Person
WHERE UPPER(Email_Address) LIKE '%@BTU.EDU%';
SELECT First_Name, Last_Name, Email_Address from Person
WHERE Email_Address ILIKE '%@btu.edu%';
メモ:最適化のために、ILIKE は大文字と小文字を区別する列に作成されたインデックスを使用できません。
関連項目