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

【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句では表現しきれない複雑なパターンの絞り込みも簡単に実現できます。

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

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

  2. MySQLでカンマ区切りの値から特定の数値を含むレコードをすべて選択する方法

    MySQLで特定の数値を含むレコードを抽出するには?カンマ区切りで保存された値の中に、特定の数値が含まれているレコードをすべて取得したい場合は、concat() 関数と LIKE 演算子を組み合わせて使用します。基本の構文は以下のとおりです。select *from yourTableName where concat(,, yourColumnName, ,) like %,yourValue,%;この方法のポイント単純に LIKE %4% とすると、「14」や「40」など意図しない数値までマッチしてしまう可能性があります。そこで、列の値の前後を concat() でカンマで囲むことで、「4