VillageSQL is a drop-in replacement for MySQL with extensions.
All examples on this page work on VillageSQL. Install Now →
LIKE は 2 つの文字で形を表します。REGEXP はパターン言語全体で形を表す
ため、LIKE には表現できない条件を指定できます。候補の中からの選択、
繰り返されるグループ、文字の範囲などです。
始める前に、mysql -u root -p sakila でクライアントを開いてください。
REGEXP の仕組み
PATTERN_TEXT を探したい正規表現に置き換えます。
条件は、パターンが値の中のどこかに一致したときに真になります。これが、値全体を
表さなければならない LIKE との最初の違いです。
以下で使う部品です。
例
- 先頭が一致する
^ がなければ、パターンはタイトル内のどこにある ACA にも一致します。
- 末尾が一致する
- 2 つの先頭のいずれか
ALBERT が 2 回現れるのは、2 人の俳優が同じ名前を持つためです。SELECT は
行を報告するのであって、重複を除いた値を報告するのではありません。
- LIKE には表せない形
これは、A または B で始まり S で終わるタイトルを求めます。
- 一致しないものすべて
NOT REGEXP は、NOT LIKE と同じように、テストを反転します。
REGEXP にも NOT REGEXP にも一致しません。どちらも NULL に対して
NULL を返すためです。IS NULL でそれを扱います。
RLIKE は同じ演算子
RLIKE と REGEXP は 1 つの演算子の 2 つの綴りです。どちらかを選び、それを
使い続けてください。
大文字と小文字、およびその区別を強制する方法
パターンは、LIKE と同じく、照合対象の照合順序に従います。そのため、
デフォルトでは小文字のパターンが大文字のテキストに一致します。REGEXP_LIKE()
はこの演算子の関数形で、その第 3 引数がそれを上書きします。'c' は大文字と
小文字を区別するという意味です。
LIKE で表せるときは LIKE を優先する
REGEXP 検索を絞り込めるインデックスはありません。一致がどこから始まっても
よいため、サーバーはすべての値をテストします。固定テキストで始まるパターンの
LIKE は、インデックスの一致する部分に直接ジャンプできます。どちらでも
フィルタを表現できるときは、LIKE のほうが 2 つのうちで安価です。
LIKE のレッスンで、どのパターンがインデックスを使え、
どれが使えないかを説明しています。
まとめ
- 値の中のどこかにあるパターンを照合するには
REGEXPを使います。 - 一致が先頭または末尾になければならないときは、
^と$でアンカーします。 RLIKEはREGEXPの別名として読みます。- 大文字と小文字を区別する照合を強制するには
REGEXP_LIKE(value, pattern, 'c')を使います。 - まず
LIKEに手を伸ばします。REGEXP検索を絞り込めるインデックスはないためです。
関連項目
- LIKE — より単純なパターン演算子
- 大文字と小文字の区別 — デフォルトを決めるもの
- WHERE — パターンを置く句
- MySQL の全文検索 — 大規模なテキスト内の単語の検索
- MySQL でのあいまい文字列一致 — 近いが等しくないテキストの照合