【MySQL】REGEXPを使って「特定の数字で始まり、次の文字が英字」のレコードを抽出する方法
MySQLではREGEXP演算子を使用することで、正規表現によるパターンマッチングが可能です。本記事では、「指定した数字で始まり、その次の文字が英数字である値」を含むレコードを抽出するクエリを、実際のサンプルコードとともに解説します。
1. サンプルテーブルの作成
まず、検証用のテーブルを作成します。
mysql> create table DemoTable
(
Value text
);
Query OK, 0 rows affected (1.28 sec)2. テストデータの挿入
INSERT文を使って、サンプルデータを登録します。
mysql> insert into DemoTable values('645st');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable values('765stp');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('665tcp');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable values('606cpp');
Query OK, 1 row affected (0.14 sec)3. 登録データの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable;
実行結果は以下のとおりです。
+--------+ | Value | +--------+ | 645st | | 765stp | | 665tcp | | 606cpp | +--------+ 4 rows in set (0.00 sec)
4. REGEXPで条件に合うレコードを抽出する
ここからが本題です。「6で始まり、次の文字が英数字である値」を持つレコードを抽出するには、以下のようなクエリを実行します。
mysql> select * from DemoTable WHERE Value REGEXP '^6[[:alnum:]]';
この正規表現の意味は次のとおりです。
- ^6 … 文字列の先頭が「6」であることを示す
- [[:alnum:]] … 次の1文字が英数字(アルファベットまたは数字)であることを示す
実行結果は以下のとおりです。
+--------+ | Value | +--------+ | 645st | | 665tcp | | 606cpp | +--------+ 3 rows in set (0.01 sec)
5. ポイント解説
結果を見ると、「765stp」は先頭が7のため除外され、先頭が6の3件だけが抽出されていることがわかります。
なお、[[:alnum:]]は英字と数字の両方にマッチする文字クラスです。もし「次の文字が必ず英字(アルファベット)のみ」に限定したい場合は、[[:alpha:]]を使用してください。また、先頭の数字を任意のものにしたい場合は、'^[0-9][[:alnum:]]'のように記述すれば柔軟に対応できます。
このようにREGEXPを活用すると、LIKE句では表現しきれない複雑なパターンの絞り込みも簡単に実現できます。
-
MySQLでSELECTクエリを使用してデータを挿入(INSERT)する方法
MySQLでは、INSERT文とSELECTクエリを組み合わせることで、テーブルにデータを挿入することができます。通常、SELECTは既存のテーブルからデータを取得するために使われますが、値を直接指定してINSERTを実行する際にも活用できる便利な手法です。基本構文SELECTクエリを使用してINSERTを実行する場合の構文は以下の通りです。insert into yourTableName(yourColumnName1,yourColumnName2,yourColumnName3,...N) select yourValue1,yourValue2,yourValue3,......N;
-
MySQLでカンマ区切りの値から特定の数値を含むレコードをすべて選択する方法
MySQLで特定の数値を含むレコードを抽出するには?カンマ区切りで保存された値の中に、特定の数値が含まれているレコードをすべて取得したい場合は、concat() 関数と LIKE 演算子を組み合わせて使用します。基本の構文は以下のとおりです。select *from yourTableName where concat(,, yourColumnName, ,) like %,yourValue,%;この方法のポイント単純に LIKE %4% とすると、「14」や「40」など意図しない数値までマッチしてしまう可能性があります。そこで、列の値の前後を concat() でカンマで囲むことで、「4