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

MySQLで正規表現(REGEXP)を使って複数の一致パターンを持つレコードを抽出する方法

MySQLでは、REGEXP(正規表現)を使用することで、特定のパターンに一致する複数の文字列を含むレコードを簡単に抽出できます。本記事では、実際にテーブルを作成し、正規表現クエリを実行して目的のレコードを取得する手順を解説します。

サンプルテーブルの作成

まず、デモ用のテーブルを作成します。以下のコマンドを実行してください。

mysql> create table DemoTable
    (
    ProductId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ProductName varchar(20)
    );
Query OK, 0 rows affected (0.19 sec)

ProductIdを主キーとし、ProductNameには商品名を格納するシンプルな構成です。

テストデータの挿入

次に、INSERTコマンドを使っていくつかのレコードを挿入します。ここでは、ハイフン(-)が含まれる商品名と含まれない商品名を混ぜて登録しています。

mysql> insert into DemoTable(ProductName) values('Product-1');
Query OK, 1 row affected (0.05 sec)

mysql> insert into DemoTable(ProductName) values('Product2');
Query OK, 1 row affected (0.06 sec)

mysql> insert into DemoTable(ProductName) values('Product1');
Query OK, 1 row affected (0.04 sec)

mysql> insert into DemoTable(ProductName) values('Product-3');
Query OK, 1 row affected (0.05 sec)

mysql> insert into DemoTable(ProductName) values('Product3');
Query OK, 1 row affected (0.05 sec)

mysql> insert into DemoTable(ProductName) values('Product-4');
Query OK, 1 row affected (0.09 sec)

mysql> insert into DemoTable(ProductName) values('Product4');
Query OK, 1 row affected (0.05 sec)

登録済みレコードの確認

SELECT文でテーブル内のすべてのレコードを表示して確認してみましょう。

mysql> select *from DemoTable;

実行すると、以下のような結果が出力されます。

+-----------+-------------+
| ProductId | ProductName |
+-----------+-------------+
| 1         | Product-1   |
| 2         | Product2    |
| 3         | Product1    |
| 4         | Product-3   |
| 5         | Product3    |
| 6         | Product-4   |
| 7         | Product4    |
+-----------+-------------+
7 rows in set (0.00 sec)

現在、7件のレコードが登録されており、「Product-1」「Product2」のように、ハイフンの有無が混在していることがわかります。

REGEXPを使った条件抽出クエリ

ここからが本題です。正規表現を使用して、複数の一致パターンを持つレコードを抽出するクエリは以下のとおりです。

mysql> select *from DemoTable
where ProductName regexp 'Product[1234].*';

パターンの意味:

  • Product:文字列「Product」で始まること
  • [1234]:直後に1〜4のいずれか1文字が続くこと
  • .*:その後に任意の文字列が続いてもよいこと

つまり、このパターンでは「Product」の直後に数字が来るレコードのみがマッチし、「Product-1」のようなハイフン入りの商品名は除外されます。

実行結果

上記のクエリを実行すると、次の出力が得られます。

+-----------+-------------+
| ProductId | ProductName |
+-----------+-------------+
| 2         | Product2    |
| 3         | Product1    |
| 5         | Product3    |
| 7         | Product4    |
+-----------+-------------+
4 rows in set (0.00 sec)

結果を見ると、ハイフンを含まない「Product1」「Product2」「Product3」「Product4」の4件だけが抽出されていることが確認できます。

まとめ

MySQLのREGEXP演算子を使えば、LIKE句よりも柔軟なパターンマッチングが可能になります。文字クラス[1234]や任意文字列.*などを組み合わせることで、複数の条件に合致するレコードを1つのクエリで効率的に取得できます。データのクリーニングや特定形式のレコード検索など、さまざまな場面で活用できるテクニックなので、ぜひ覚えておきましょう。

  1. MySQLで現在の日付(CURDATE())に一致する特定の日付のレコードを更新する方法

    MySQLでは、CURDATE()関数を使うことで、現在の日付に一致するレコードだけを抽出し、UPDATE文で効率的に値を変更できます。本記事では、実際のサンプルを通じてその手順をわかりやすく解説します。 1. サンプルテーブルの作成 まず、デモ用のテーブルを作成します。ここでは「金額(Amount)」と「期日(DueDate)」を持つシンプルなテーブルを用意しました。 mysql> create table DemoTable1822      (      Amount int,      Du

  2. MySQLで列が複数の値をすべて満たす行を選択する方法|GROUP BY・HAVING句の使い方

    MySQLである列が「複数の値をすべて満たしている」行だけを抽出したい場合、IN()句と GROUP BY、そして HAVING 句を組み合わせることで実現できます。この記事では、具体的なサンプルを使いながら手順をわかりやすく解説します。1. サンプルテーブルを作成するまず、テスト用のテーブルを作成します。ここでは氏名(FirstName)と科目(Subject)を持つシンプルなテーブルを用意しました。mysql> create table DemoTable1885 ( FirstName varchar(20), Subject varchar(50)