カテゴリ:

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

LIKE

パターンとの比較に基づいて、大文字と小文字を区別して文字列を照合します。大文字と小文字を区別しないマッチングでは、代わりに ILIKE を使用します。

サブジェクト文字列がパターンに一致する場合、サブジェクト文字列を返します。

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

こちらもご覧ください

ILIKERLIKELIKE ANY

構文

<subject> LIKE <pattern> [ ESCAPE <escape> ]

LIKE( <subject> , <pattern> [ , <escape> ] )

引数

必須:

サブジェクト

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

パターン

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

オプション:

エスケープ

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

戻り値

返される値のデータ型は、 サブジェクト のデータ型と同じです。

使用上の注意

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

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

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

  • パターン のワイルドカードには、一致として サブジェクト の改行文字(\n)が含まれます。

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

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

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

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

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

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

照合の詳細

Arguments with collation specifications are currently not supported.

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

CREATE OR REPLACE TABLE like_ex(subject varchar(20));
INSERT INTO like_ex VALUES
    ('John  Dddoe'),
    ('Joe   Doe'),
    ('John_down'),
    ('Joe down'),
    ('Elaine'),
    (''),    -- empty string
    (null);
SELECT * FROM like_ex WHERE subject LIKE '%Jo%oe%';
+-------------+
| SUBJECT     |
|-------------|
| John  Dddoe |
| Joe   Doe   |
+-------------+
SELECT * FROM like_ex WHERE subject LIKE '%J%h%^_do%' ESCAPE '^';
+-----------+
| SUBJECT   |
|-----------|
| John_down |
+-----------+
SELECT * FROM like_ex WHERE subject NOT LIKE 'John%';
+-----------+
| SUBJECT   |
|-----------|
| Joe   Doe |
| Joe down  |
| Elaine    |
|           |
+-----------+
SELECT * FROM like_ex WHERE subject NOT LIKE '';
+-------------+
| SUBJECT     |
|-------------|
| John  Dddoe |
| Joe   Doe   |
| John_down   |
| Joe down    |
| Elaine      |
+-------------+

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

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

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

SELECT * FROM like_ex WHERE subject LIKE '100%'
    ORDER BY 1;
+------------+
| SUBJECT    |
|------------|
| 100 times  |
| 100%       |
| 1000 times |
+------------+

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

SELECT * FROM like_ex WHERE subject LIKE '100^%' ESCAPE '^'
    ORDER BY 1;
+---------+
| SUBJECT |
|---------|
| 100%    |
+---------+

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

SELECT * FROM like_ex WHERE subject LIKE '100\\%' ESCAPE '\\'
    ORDER BY 1;
+---------+
| SUBJECT |
|---------|
| 100%    |
+---------+