【MySQL】正規表現(REGEXP)で特定のパターンに一致するデータを検索する方法
MySQLで正規表現を使って特定パターンのデータを検索する方法
MySQLでは、REGEXP演算子(正規表現)を使用することで、特定のパターンに一致するレコードを簡単に検索できます。ここでは、サンプルテーブルを作成し、「英数字4文字-英数字3文字-英数字1文字」というパターンで検索する手順を解説します。
1. サンプルテーブルの作成
まず、検索対象となるテーブルを作成しましょう。
mysql> create table DemoTable ( UserId varchar(100) ); Query OK, 0 rows affected (1.28 sec)
2. テストデータの挿入
INSERT文を使って、いくつかのレコードを登録します。
mysql> insert into DemoTable values('User-123-G');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Us-453-GO');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable values('TRUE-908-K');
Query OK, 1 row affected (0.20 sec)
3. 登録データの確認
SELECT文ですべてのレコードを表示してみます。
mysql> select *from DemoTable;
実行結果は以下の通りです。
+------------+ | UserId | +------------+ | User-123-G | | Us-453-GO | | TRUE-908-K | +------------+ 3 rows in set (0.00 sec)
4. REGEXPによるパターン検索クエリ
次のクエリが、MySQLで特定のパターンを検索する例です。ここでは「英数字4文字 – 英数字3文字 – 英数字1文字」というパターンを設定しています。
注意:「–」はハイフン(半角の「-」)を意味します。
mysql> select *from DemoTable where UserId regexp '^[[:alnum:]]{4}-[[:alnum:]]{3}-[[:alnum:]]{1}$';
実行結果は以下の通りです。
+------------+ | UserId | +------------+ | User-123-G | | TRUE-908-K | +------------+ 2 rows in set (0.12 sec)
クエリのポイント解説
[[:alnum:]]:英数字1文字にマッチするPOSIX文字クラスです。{n}:直前の要素をn回繰り返すことを指定します(例:{4}なら4文字連続)。^と$:それぞれ文字列の先頭・末尾を表し、パターン全体への完全一致を強制します。
結果を見ると、「Us-453-GO」はハイフン前が2文字しかなく、末尾も2文字あるためパターンに合致せず、除外されました。このようにREGEXPと文字クラスを組み合わせれば、柔軟かつ厳密な形式チェック付きの検索が可能になります。
-
MySQLでデータを特定の順序に並べ替える方法を解説
MySQLでデータを特定の順序に並べ替える方法MySQLでデータを任意の順序に並べ替えたい場合は、ORDER BY IF() を使用します。この手法を使うと、指定した値を持つレコードを優先的に先頭に表示し、残りのレコードをその後に続けることができます。基本構文以下が、ORDER BY IF() を使った並べ替えの構文です。select *from yourTableName ORDER BY IF(yourColumnName=yourValue1 OR yourColumnName=yourValue2 OR yourColumnName=yourValue3,yourColumnName,
-
MySQLで特定のカラムのデータをエクスポートする方法(INTO OUTFILEの使い方)
MySQLで特定のカラムのデータをエクスポートする方法 MySQLでテーブルから特定のカラム(列)のデータだけをファイルに書き出したい場合は、SELECT文とINTO OUTFILEを組み合わせるのが最もシンプルで確実な方法です。この記事では、実際にテーブルを作成し、データを投入したうえで、特定のカラムをテキストファイルへエクスポートする手順を順番に解説します。 基本構文 特定のカラムをファイルに出力する際の基本構文は次のとおりです。 select yourColumnName from yourTableName into outfile yourLocationOfFile; このように