expr LIKE pat [ESCAPE 'escape_char']
SQL の簡単な正規の比較式を使用してのパターン マッチング。1
( TRUE
) または 0
( FALSE
) を戻します。expr
もしくは pat
のどちらかが NULL
である場合、結果は NULL
になります。
パターンはリテラル ストリングである必要があります。例えば、文字列式、またはテーブル カラムとして指定するのでもかまいません。
SQL 標準に当たり、LIKE
は文字ごとにマッチングを行うので、=
比較演算子とは異なる結果を生成することができます。
mysql>SELECT 'ä' LIKE 'ae' COLLATE latin1_german2_ci;
+-----------------------------------------+ | 'ä' LIKE 'ae' COLLATE latin1_german2_ci | +-----------------------------------------+ | 0 | +-----------------------------------------+ mysql>SELECT 'ä' = 'ae' COLLATE latin1_german2_ci;
+--------------------------------------+ | 'ä' = 'ae' COLLATE latin1_german2_ci | +--------------------------------------+ | 1 | +--------------------------------------+
LIKE
では、次のふたつのワイルドカード文字をパターンで使用することができます :
文字 | 説明 |
% |
0 からあらゆる数の文字でもマッチする。 |
_ |
ひとつの文字を明確にマッチする。 |
mysql>SELECT 'David!' LIKE 'David_';
-> 1 mysql>SELECT 'David!' LIKE '%D%v%';
-> 1
ワイルドカード文字のリテラル インスタンスをテストするには、エスケープ文字で優先させます。ESCAPE
文字を指定しない場合は、‘\
’ が仮定されます。
ストリング | 説明 |
\% |
‘% ’ 文字をひとつマッチする。 |
\_ |
‘_ ’ 文字をひとつマッチする。 |
mysql>SELECT 'David!' LIKE 'David\_';
-> 0 mysql>SELECT 'David_' LIKE 'David\_';
-> 1
異なるエスケープ文字を指定するには、ESCAPE
句を使用します :
mysql> SELECT 'David_' LIKE 'David|_' ESCAPE '|';
-> 1
エスケープ シーケンスは空か、1 文字長である必要があります。MySQL 5.1.2 からは、NO_BACKSLASH_ESCAPES
SQL モードを有効にすると、シーケンスを空にすることはできません。
次のふたつのステートメントは、オペランドのひとつがバイナリ ストリングでない限り、文字列比較は大文字小文字の区別をしないことを示しています :
mysql>SELECT 'abc' LIKE 'ABC';
-> 1 mysql>SELECT 'abc' LIKE BINARY 'ABC';
-> 0
MySQL では、LIKE
を数値式で使用することができます。( 標準の SQL LIKE
のエクステンションです ) 。
mysql> SELECT 10 LIKE '1%';
-> 1
注記 :MySQL は C エスケープ構文をストリングで使用するため ( 例えば、‘\n
’ で改行文字を表現 ) 、LIKE
ストリングで使用する ‘\
’ はすべて二重にする必要があります。例えば、‘\n
’ を検索するには、‘\\n
’ と指定します。‘\
’ の検索には、‘\\\\
’ と指定します。これは、バックスラッシュがパーサによってストリップされ、そしてパターンのマッチが実行された時にもストリップされるため、ひとつのバックスラッシュを残してマッチさせるためです。(
例外 :パターン ストリングの最後では、バックスラッシュは ‘\\
’ と指定できます。ストリングの末尾では、エスケープの後に連なるものがないため、バックスラッシュはそのもので独立することができます ) 。