MySQLのRLIKE/REGEXPパターンで正規表現検索を行う方法を徹底解説
MySQLのRLIKE演算子(REGEXPと同義)を使うと、正規表現パターンに基づいてレコードを柔軟に抽出できます。ここでは「列の値が母音2文字で始まるレコード」を取得する方法を例に、具体的な使い方を解説します。
基本の構文
母音2文字で始まる値を持つレコードを抽出する場合、基本の構文は以下のとおりです。
select *from yourTableName where yourColumnName RLIKE '^[aeiouAEIOU][aeiouAEIOU]';
サンプルテーブルの作成
まず、動作確認用のテーブルを作成します。
mysql> create table DemoTable664(CityName varchar(100)); Query OK, 0 rows affected (0.89 sec)
次に、insertコマンドを使ってレコードを挿入します。
mysql> insert into DemoTable664 values('Springfield');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable664 values('Austin');
Query OK, 1 row affected (0.30 sec)
mysql> insert into DemoTable664 values('Franklin');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable664 values('OAKLAND');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable664 values('Anchorage');
Query OK, 1 row affected (0.18 sec)
select文で、テーブル内のすべてのレコードを確認してみましょう。
mysql> select *from DemoTable664;
実行すると、次のような結果が得られます。
+-------------+ | CityName | +-------------+ | Springfield | | Austin | | Franklin | | OAKLAND | | Anchorage | +-------------+ 5 rows in set (0.00 sec)
RLIKE/REGEXPパターンで抽出する
それでは、RLIKEパターンを使って「列の値が母音2文字で始まるレコード」だけを表示するクエリを実行します。
mysql> select *from DemoTable664 where CityName RLIKE '^[aeiouAEIOU][aeiouAEIOU]';
実行結果は以下のとおりです。
+----------+ | CityName | +----------+ | Austin | | OAKLAND | +----------+ 2 rows in set (0.00 sec)
パターンの解説
使用した正規表現パターン「^[aeiouAEIOU][aeiouAEIOU]」の意味は以下のとおりです。
- ^:文字列の先頭を表します。
- [aeiouAEIOU]:小文字・大文字いずれかの母音1文字にマッチします。
- この文字クラスを2回繰り返すことで、「先頭が母音2文字で始まる」文字列にマッチします。
今回の例では、Austin(Auで始まる)とOAKLAND(OAで始まる)の2件が該当しました。一方、Springfield(Sp)やFranklin(Fr)は先頭が子音、Anchorage(An)は先頭の母音が1文字のみのため、いずれも除外されています。
このようにRLIKE(REGEXP)を活用すれば、LIKEでは表現しづらい複雑な文字列パターンの条件も、シンプルなクエリで実現できます。
-
MySQLでWITH ROLLUPを正しく使う方法!GROUP BYと組み合わせた集計テクニックを解説
WITH ROLLUPとは?MySQLのWITH ROLLUPは、GROUP BY句と組み合わせて使用することで、グループごとの集計結果に加えて、全体の合計(総計)行を自動的に追加してくれる便利な機能です。レポート作成やデータ分析の際に、別途合計用のクエリを実行する必要がなくなるため、非常に効率的です。基本構文WITH ROLLUPを使用する際の基本的な構文は以下の通りです。select yourColumnName1,sum(yourColumnName2) from yourTableNamegroup by yourColumnName1 with rollup;サンプルテーブルの作成ま
-
MySQLでCURDATE()とLIKE句を使った部分一致検索の方法
MySQLにはCONTAINS()という名前の関数は存在しません。そのため、現在の日付(CURDATE())に関連する文字列で部分一致検索を行いたい場合は、CONCAT()関数とLIKE句を組み合わせる方法が有効です。本記事では、実際にサンプルテーブルを作成しながら、その手順を順番に解説していきます。現在の日付を確認するまず、CURDATE()関数を使って現在の日付を取得してみましょう。mysql> select curdate();実行結果は以下の通りです。+------------+ | curdate() | +------------+ | 2019-11-28 | +----