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つのクエリで効率的に取得できます。データのクリーニングや特定形式のレコード検索など、さまざまな場面で活用できるテクニックなので、ぜひ覚えておきましょう。
-
MySQLで現在の日付(CURDATE())に一致する特定の日付のレコードを更新する方法
MySQLでは、CURDATE()関数を使うことで、現在の日付に一致するレコードだけを抽出し、UPDATE文で効率的に値を変更できます。本記事では、実際のサンプルを通じてその手順をわかりやすく解説します。 1. サンプルテーブルの作成 まず、デモ用のテーブルを作成します。ここでは「金額(Amount)」と「期日(DueDate)」を持つシンプルなテーブルを用意しました。 mysql> create table DemoTable1822 ( Amount int, Du
-
MySQLで列が複数の値をすべて満たす行を選択する方法|GROUP BY・HAVING句の使い方
MySQLである列が「複数の値をすべて満たしている」行だけを抽出したい場合、IN()句と GROUP BY、そして HAVING 句を組み合わせることで実現できます。この記事では、具体的なサンプルを使いながら手順をわかりやすく解説します。1. サンプルテーブルを作成するまず、テスト用のテーブルを作成します。ここでは氏名(FirstName)と科目(Subject)を持つシンプルなテーブルを用意しました。mysql> create table DemoTable1885 ( FirstName varchar(20), Subject varchar(50)