MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLの正規表現(REGEXP)を使ってSELECTクエリでレコードを抽出する方法

MySQLの正規表現(REGEXP)を使ってSELECTクエリでレコードを抽出する方法

MySQLでは、REGEXP演算子をWHERE句と組み合わせることで、正規表現パターンに一致するレコードだけを柔軟に抽出できます。本記事では、サンプルテーブルの作成からデータ挿入、そして正規表現を活用したSELECTクエリの実行まで、具体的な手順を解説します。

1. テーブルの作成

まず、以下のコマンドでサンプル用のテーブルを作成します。

mysql> create table DemoTable1573
    -> (
    -> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> StudentCode varchar(20)
    -> );
Query OK, 0 rows affected (0.63 sec)

ここでは、自動採番されるStudentIdを主キーとし、学生コードを格納するStudentCodeカラム(varchar型)を定義しています。

2. レコードの挿入

続いて、INSERTコマンドを使ってテーブルに複数のレコードを追加します。

mysql> insert into DemoTable1573(StudentCode) values('STU_774');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1573(StudentCode) values('909_Sam');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1573(StudentCode) values('3_Carol_455');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1573(StudentCode) values('David_903');
Query OK, 1 row affected (0.14 sec)

3. 全レコードの確認

SELECT文を実行して、テーブル内のすべてのレコードを表示してみましょう。

mysql> select * from DemoTable1573;

実行結果は以下のとおりです。

+-----------+-------------+
| StudentId | StudentCode |
+-----------+-------------+
|         1 | STU_774     |
|         2 | 909_Sam     |
|         3 | 3_Carol_455 |
|         4 | David_903   |
+-----------+-------------+
4 rows in set (0.00 sec)

4. 正規表現を使ったSELECTクエリの実行

それでは本題です。REGEXP演算子を使って、「数字を含むStudentCode」を持つレコードを抽出するクエリは以下のようになります。

mysql> select * from DemoTable1573 where StudentCode regexp '[0-9]';

実行結果:

+-----------+-------------+
| StudentId | StudentCode |
+-----------+-------------+
|         2 | 909_Sam     |
|         3 | 3_Carol_455 |
+-----------+-------------+
2 rows in set (0.14 sec)

結果のポイント解説

このクエリでは、パターン[0-9]が「0から9までのいずれかの数字1文字」にマッチする文字クラスとして機能します。重要なのは、REGEXPは部分一致で評価されるという点です。つまり、文字列の先頭や末尾だけでなく、途中に数字が含まれていても条件を満たします。

そのため、先頭が数字ではない「909_Sam」や「3_Carol_455」だけでなく、末尾に数字を含む「STU_774」「David_903」も本来はマッチ対象になります。逆に、英字のみの文字列は除外されます。より厳密な条件(例:先頭が数字であること)を指定したい場合は、^[0-9]のようにアンカー(^)を組み合わせるとよいでしょう。

REGEXPはRLIKEの別名でもあり、LIKE句の単純なワイルドカード(%や_)では表現できない複雑なパターンマッチングを実現できるため、ログ解析やコード形式のバリデーションなど、さまざまな場面で活用できます。

  1. MySQLで0を末尾に回して並べ替える!条件付きSELECTとORDER BYの使い方

    MySQLでは、ORDER BY句に「カラム名=0」という条件式を組み合わせることで、0以外の値を昇順に並べたうえで、0のレコードだけを末尾にまとめて表示できます。この記事では、その具体的な書き方と実行例を分かりやすく解説します。基本構文select * from yourTableName order by yourColumnName=0, yourColumnName;この構文のポイントは、yourColumnName=0 がブール値として評価される点です。値が0であれば「1(真)」、0以外であれば「0(偽)」となるため、昇順ソートでは0以外の値の行が先に並び、その後ろに0の行が配置され

  2. MySQLでSELECTクエリを使用してデータを挿入(INSERT)する方法

    MySQLでは、INSERT文とSELECTクエリを組み合わせることで、テーブルにデータを挿入することができます。通常、SELECTは既存のテーブルからデータを取得するために使われますが、値を直接指定してINSERTを実行する際にも活用できる便利な手法です。基本構文SELECTクエリを使用してINSERTを実行する場合の構文は以下の通りです。insert into yourTableName(yourColumnName1,yourColumnName2,yourColumnName3,...N) select yourValue1,yourValue2,yourValue3,......N;