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