MySql公式マニュアル学習ノート2 MySqlのあいまい検索と正規表現
SQLパターンマッチングは「_」を使用することができます。任意の1文字にマッチします。「%」は任意の数の文字にマッチします。はい、 MySQLでは、SQLのパターンはデフォルトでは大文字と小文字を無視しています。いくつかの例を示します。注意SQLモードの場合は、====;LIKEまたはNOT LIKEを使ってオペレータを比較するべきです。
「b」で始まる名前を探したいです。
正規表現を拡張するいくつかの文字は以下の通りです。
・ ‘.'任意の文字にマッチします。
・ 文字クラス「...」は、四角い括弧内の任意の文字にマッチします。例えば、「[a b c]」は、「a」、「b」、または「c」に整合する。文字の名前を付ける範囲に「-」を使います。a-z''は任意の文字にマッチし、「0-9」は任意の数字にマッチします。
・ “ * ”ゼロまたは複数の前の文字にマッチします。例えば、「x*」は任意の数の「x」文字にマッチし、「0-9」は任意の数の数字にマッチし、「.*」は任意の数の文字にマッチします。 REGEXPモードがテストされた値のどこにでもマッチする場合、モードは一致する(これはLIKEモードとは違って、全体の値と一致するだけで、モードは一致する)。 は、テストされた値の開始または終了に一致するようにモードを特定するために、モード開始に「^」またはモードの最後に「$」を使用する。 拡張正規表現がどのように動作するかを説明するために、REGEXPを使って上記のLIKEクエリを書き換えます。
「b」で始まる名前を探すために、「^」を使って名前に合うスタートです。
ちょうど5文字の名前を見つけるために、「^」と「$」を使って名前の最初と最後に一致し、5つの「.」の例との間にあります。
「b」で始まる名前を探したいです。
mysql> SELECT * FROM pet WHERE name LIKE 'b%';
+--------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+------------+
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+
「fy」で終わる名前を探したいです。
mysql> SELECT * FROM pet WHERE name LIKE '%fy';
+--------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
「w」を含む名前を見つけたいです。+--------+--------+---------+------+------------+-------+
mysql> SELECT * FROM pet WHERE name LIKE '%w%';
+----------+-------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+------------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
ちょうど5文字が含まれている名前を探したいなら、「ウ」を使います。モード文字:| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
+----------+-------+---------+------+------------+------------+
mysql> SELECT * FROM pet WHERE name LIKE '_____';
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
MySQLによって提供されるパターンマッチングの他のタイプは拡張正規表現を使用する。これらのモードをマッチングテストするとき、REGEXPとNOT REGEXPのオペレータ(またはRLIKEとNOT RLIKEとは同義語である)を使用する。正規表現を拡張するいくつかの文字は以下の通りです。
・ ‘.'任意の文字にマッチします。
・ 文字クラス「...」は、四角い括弧内の任意の文字にマッチします。例えば、「[a b c]」は、「a」、「b」、または「c」に整合する。文字の名前を付ける範囲に「-」を使います。a-z''は任意の文字にマッチし、「0-9」は任意の数字にマッチします。
・ “ * ”ゼロまたは複数の前の文字にマッチします。例えば、「x*」は任意の数の「x」文字にマッチし、「0-9」は任意の数の数字にマッチし、「.*」は任意の数の文字にマッチします。
「b」で始まる名前を探すために、「^」を使って名前に合うスタートです。
+-------+--------+---------+------+------------+-------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+
mysql> SELECT * FROM pet WHERE name REGEXP '^b';
+--------+--------+---------+------+------------+------------+
強制的にREGEXPを大文字と小文字を区別したい場合は、BINARYを使って文字列の一つをバイナリ文字列に変更します。このクエリは名前の最初の文字の小文字‘b’だけにマッチします。| name | owner | species | sex | birth | death |
「fy」で終わる名前を見つけるために、「$」で名前に合う末尾を使います。+--------+--------+---------+------+------------+------------+
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+
mysql> SELECT * FROM pet WHERE name REGEXP BINARY '^b';
「w」を含む名前を探すために、以下の問い合わせを使います。mysql> SELECT * FROM pet WHERE name REGEXP 'fy$';
+--------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+--------+--------+---------+------+------------+-------+
正規表現が値のどこにでも現れると、パターンが一致するので、前のクエリーにモードの両側にワイルドカードを置いて、それが全体の値に一致するようにする必要はありません。SQLモードを使ったように。ちょうど5文字の名前を見つけるために、「^」と「$」を使って名前の最初と最後に一致し、5つの「.」の例との間にあります。
mysql> SELECT * FROM pet WHERE name REGEXP 'w';
+----------+-------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+------------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
前のクエリを「{n}」「繰り返しn回」のオペレータで書き直すこともできます。| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
+----------+-------+---------+------+------------+------------+
mysql> SELECT * FROM pet WHERE name REGEXP '^.....$';
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+