- カテゴリ:
- 文字列とバイナリ関数 (マッチング/比較) 
[ NOT ] LIKE¶
大文字小文字を区別した比較を実行し、文字列が指定したパターンに一致するかどうかを判定します。大文字と小文字を区別しないマッチングでは、代わりに ILIKE を使用します。
LIKE、 ILIKE、 RLIKE はすべて、同様の操作を実行します。ただし、 RLIKE は、LIKE および ILIKEで使用される SQL パターン構文の代わりに POSIX ERE (拡張正規表現)構文を使用します。
Tip
検索最適化サービスを使用すると、この関数を呼び出すクエリのパフォーマンスを向上させることができます。詳細については、 検索最適化サービス をご参照ください。
- こちらもご参照ください:
構文¶
<subject> [ NOT ] LIKE <pattern> [ ESCAPE <escape> ]
LIKE( <subject> , <pattern> [ , <escape> ] )
引数¶
必須:
- 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 '\\'; - エスケープ文字の使用例、特にエスケープ文字としてのバックスラッシュについては、 例 をご参照ください。 
照合順序の詳細¶
upper、 lower、 trim 照合順序仕様のみがサポートされています。 upper、 lower、 trim の組み合わせもサポートされています(例: upper-trim と lower-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);
次の例は、 LIKE、 NOT LIKE、ワイルドカード文字 % の使用を示しています。
SELECT name
  FROM like_ex
  WHERE name LIKE '%Jo%oe%'
  ORDER BY name;
+------------------+
| NAME             |
|------------------|
| Joe   Doe        |
| John  Dddoe      |
| John 'alias' Doe |
+------------------+
SELECT name
  FROM like_ex
  WHERE name NOT LIKE '%Jo%oe%'
  ORDER BY name;
+-----------+
| NAME      |
|-----------|
|           |
| Elaine    |
| Joe down  |
| John_down |
+-----------+
SELECT name
  FROM like_ex
  WHERE name NOT LIKE 'John%'
  ORDER BY name;
+-----------+                                                                   
| NAME      |
|-----------|
|           |
| Elaine    |
| Joe   Doe |
| Joe down  |
+-----------+
SELECT name
  FROM like_ex
  WHERE name NOT LIKE ''
  ORDER BY name;
+------------------+
| NAME             |
|------------------|
| Elaine           |
| Joe   Doe        |
| Joe down         |
| John  Dddoe      |
| John 'alias' Doe |
| John_down        |
+------------------+
次の例では、バックスラッシュを使って一重引用符をエスケープし、パターンマッチで見つけられるようにしています。
SELECT name
  FROM like_ex
  WHERE name LIKE '%\'%'
  ORDER BY name;
+------------------+
| NAME             |
|------------------|
| John 'alias' Doe |
+------------------+
以下の例では、 ESCAPE 句を使用しています。
SELECT name
  FROM like_ex
  WHERE name LIKE '%J%h%^_do%' ESCAPE '^'
  ORDER BY name;
+-----------+                                                                   
| NAME      |
|-----------|
| John_down |
+-----------+
like_ex テーブルにさらに行を挿入します。
INSERT INTO like_ex (name) VALUES 
  ('100 times'),
  ('1000 times'),
  ('100%');
エスケープ文字がない場合は、パーセント記号(%)はワイルドカードとして扱われます。
SELECT * FROM like_ex WHERE name LIKE '100%'
  ORDER BY 1;
+------------+                                                                  
| NAME       |
|------------|
| 100 times  |
| 100%       |
| 1000 times |
+------------+
エスケープ文字を使用すると、パーセント記号(%)はリテラルとして扱われます。
SELECT * FROM like_ex WHERE name LIKE '100^%' ESCAPE '^'
  ORDER BY 1;
+------+                                                                        
| NAME |
|------|
| 100% |
+------+
次の例では、バックスラッシュがエスケープ文字である ESCAPE 句を使用しています。バックスラッシュ自体は ESCAPE 句と式の両方でエスケープする必要があることに注意してください。
SELECT * FROM like_ex WHERE name LIKE '100\\%' ESCAPE '\\'
  ORDER BY 1;
+------+                                                                        
| NAME |
|------|
| 100% |
+------+