カテゴリ:

文字列とバイナリ関数 (マッチング/比較)

[ NOT ] LIKE

大文字小文字を区別した比較を実行し、文字列が指定したパターンに一致するかどうかを判定します。大文字と小文字を区別しないマッチングでは、代わりに ILIKE を使用します。

LIKE、 ILIKE、 RLIKE はすべて、同様の操作を実行します。ただし、 RLIKE は、LIKE および ILIKEで使用される SQL パターン構文の代わりに POSIX ERE (拡張正規表現)構文を使用します。

Tip

検索最適化サービスを使用すると、この関数を呼び出すクエリのパフォーマンスを向上させることができます。詳細については、 検索最適化サービス をご参照ください。

こちらもご参照ください:

[ NOT ] ILIKE , [ NOT ] RLIKE , LIKE ALL, LIKE ANY

構文

<subject> [ NOT ] LIKE <pattern> [ ESCAPE <escape> ] LIKE( <subject> , <pattern> [ , <escape> ] ) 
Copy

引数

必須:

subject

一致するサブジェクトです。通常、これは VARCHAR ですが、他のデータ型も使用できます。

pattern

一致するパターンです。通常、これは VARCHAR ですが、他のデータ型も使用できます。

オプション:

escape

ワイルドカードをワイルドカードとしてではなく通常の文字として解釈されることを示すために、ワイルドカード文字の前に挿入される文字です。

戻り値

BOOLEAN または NULL を返します。

  • LIKE を指定した場合、一致するときの値は TRUE。それ以外の場合は、 FALSE を返します。

  • NOT LIKE を指定した場合、一致しない時の値は TRUE。それ以外の場合は、 FALSE を返します。

  • LIKE か NOT LIKE のどちらかを指定した場合、引数の中に NULL があれば NULL を返します。

使用上の注意

  • パターンマッチに一重引用符やその他の特殊文字を含めるには、 バックスラッシュエスケープシーケンス を使用します。

  • NULL は NULL と一致しません。つまり、サブジェクトが NULL で、パターンが NULLの場合、一致とは見なされません。

  • SQL ワイルドカードは pattern でサポートされています。

    • アンダースコア(_)は、任意の1文字に一致します。

    • パーセント記号(%)は、ゼロ個以上の文字のシーケンスに一致します。

  • pattern のワイルドカードには、一致として subject の改行文字(n)が含まれます。

  • パターンマッチングは文字列全体をカバーします。文字列内の任意の場所でシーケンスを照合するには、パターンを % で開始および終了します。

  • デフォルトのエスケープ文字はありません。

  • バックスラッシュをエスケープ文字として使用する場合は、式と ESCAPE 句の両方でバックスラッシュをエスケープする必要があります。たとえば、次のコマンドは、エスケープ文字がバックスラッシュであることを指定し、そのエスケープ文字を使用してリテラルとして % を検索します(エスケープ文字なしでは、 % はワイルドカードとして扱われます)。

    'SOMETHING%' LIKE '%\\%%' ESCAPE '\\'; 
    Copy

    エスケープ文字の使用例、特にエスケープ文字としてのバックスラッシュについては、 をご参照ください。

照合順序の詳細

upperlowertrim 照合順序仕様のみがサポートされています。 upperlowertrim の組み合わせもサポートされています(例: upper-trimlower-trim)。ただし、ロケールの組み合わせは除きます(例: en-upper)。

いくつかの文字列を含むテーブルを作成します。

CREATE OR REPLACE TABLE like_ex(name VARCHAR(20)); INSERT INTO like_ex VALUES ('John Dddoe'), ('John \'alias\' Doe'), ('Joe Doe'), ('John_down'), ('Joe down'), ('Elaine'), (''), -- empty string (null); 
Copy

次の例は、 LIKENOT LIKE、ワイルドカード文字 % の使用を示しています。

SELECT name FROM like_ex WHERE name LIKE '%Jo%oe%' ORDER BY name; 
Copy
+------------------+ | NAME | |------------------| | Joe Doe | | John Dddoe | | John 'alias' Doe | +------------------+ 
SELECT name FROM like_ex WHERE name NOT LIKE '%Jo%oe%' ORDER BY name; 
Copy
+-----------+ | NAME | |-----------| | | | Elaine | | Joe down | | John_down | +-----------+ 
SELECT name FROM like_ex WHERE name NOT LIKE 'John%' ORDER BY name; 
Copy
+-----------+  | NAME | |-----------| | | | Elaine | | Joe Doe | | Joe down | +-----------+ 
SELECT name FROM like_ex WHERE name NOT LIKE '' ORDER BY name; 
Copy
+------------------+ | NAME | |------------------| | Elaine | | Joe Doe | | Joe down | | John Dddoe | | John 'alias' Doe | | John_down | +------------------+ 

次の例では、バックスラッシュを使って一重引用符をエスケープし、パターンマッチで見つけられるようにしています。

SELECT name FROM like_ex WHERE name LIKE '%\'%' ORDER BY name; 
Copy
+------------------+ | NAME | |------------------| | John 'alias' Doe | +------------------+ 

以下の例では、 ESCAPE 句を使用しています。

SELECT name FROM like_ex WHERE name LIKE '%J%h%^_do%' ESCAPE '^' ORDER BY name; 
Copy
+-----------+  | NAME | |-----------| | John_down | +-----------+ 

like_ex テーブルにさらに行を挿入します。

INSERT INTO like_ex (name) VALUES ('100 times'), ('1000 times'), ('100%'); 
Copy

エスケープ文字がない場合は、パーセント記号(%)はワイルドカードとして扱われます。

SELECT * FROM like_ex WHERE name LIKE '100%' ORDER BY 1; 
Copy
+------------+  | NAME | |------------| | 100 times | | 100% | | 1000 times | +------------+ 

エスケープ文字を使用すると、パーセント記号(%)はリテラルとして扱われます。

SELECT * FROM like_ex WHERE name LIKE '100^%' ESCAPE '^' ORDER BY 1; 
Copy
+------+  | NAME | |------| | 100% | +------+ 

次の例では、バックスラッシュがエスケープ文字である ESCAPE 句を使用しています。バックスラッシュ自体は ESCAPE 句と式の両方でエスケープする必要があることに注意してください。

SELECT * FROM like_ex WHERE name LIKE '100\\%' ESCAPE '\\' ORDER BY 1; 
Copy
+------+  | NAME | |------| | 100% | +------+