LIKE
LIKE を使用すると、文字ベースの列データ内でパターン検索が可能になります。
構文
WHERE 式 [NOT] LIKE 値
備考
LIKE 式の右辺の値は、単純な文字定数、USER キーワード、または(ストアド プロシージャ外では)疑問符で示される、実行時に供給される動的パラメーターである必要があります。動的パラメーターは、SQL Editor 内ではサポートされません。アプリケーション コードでのみサポートされます。
列の値内の 0 個以上の文字と一致させるには、比較値の中で必要な回数だけパーセント記号ワイルドカードを使用します。1 文字と一致させるには、アンダースコア ワイルドカードを使用します。これらのワイルドカード記号をリテラル文字として一致させる必要がある場合は、記号の前に円記号を使用して、その記号がリテラル文字であることを示します。
表 36 特殊文字
文字 | 用途 |
---|
パーセント記号 "%" | ワイルドカード:0 個以上の文字と一致します。 |
アンダースコア "_" | ワイルドカード:1 つの文字と一致します。 |
円記号 "\" | 後続のワイルドカード文字はリテラル文字を表すものとし、実際のワイルドカード文字そのものと一致させたいことを示します。円記号と一致させるには、円記号を 2 つ入力します。たとえば、"%" と一致させるには、パターンは "\%0" と指定する必要があります。 |
2 つの一重引用符 "" | 結果文字列内の一重引用符と一致させるには、2 つの一重引用符を間に空白を入れないで使用する必要があります。たとえば、データベースの列に "Jim's house" という値が含まれている場合、WHERE 句で LIKE 'Jim''s house' を指定すると、このパターンと一致させることができます。二重引用符はパターン文字列内では特殊文字でないため、すべての文字や数字と同様に使用できます。 |
例
次の例は、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 + '%';