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

MySQLで99S・50Kなど数字と英字が組み合わされたレコードを取得するクエリ方法

「99S」や「50K」のように、数字の後に英字が続く形式のレコードをMySQLで取得したい場合、最も簡単な方法是REGEXP(正規表現)を使うことです。この記事では、実際にテーブルを作成し、目的の形式を持つレコードだけを抽出する手順をわかりやすく解説します。

サンプルテーブルの作成

まず、以下のCREATE TABLE文でテーブルを作成します。

mysql> create table DemoTable
(
    Id varchar(50)
);
Query OK, 0 rows affected (0.77 sec)

テーブルへのレコード挿入

続いて、INSERT文を使って複数のレコードを登録します。

mysql> insert into DemoTable values('John123');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values('123Chris');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('99Bob');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('19David');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('99S');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('10M');
Query OK, 1 row affected (0.14 sec)

登録済みレコードの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

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

+----------+
| Id       |
+----------+
| John123  |
| 123Chris |
| 99Bob    |
| 19David  |
| 99S      |
| 10M      |
+----------+
6 rows in set (0.00 sec)

数字+英字形式のレコードを抽出するクエリ

「数字2桁+英大文字1文字」という形式で構成されたレコードのみを取得するには、次のようにREGEXPを使用します。

mysql> select *from DemoTable where Id regexp '^[0-9][0-9][A-Z]$';

この正規表現の意味は以下の通りです。

  • ^:文字列の先頭を表す
  • [0-9][0-9]:0〜9の数字が2桁連続することを表す
  • [A-Z]:A〜Zの英大文字が1文字続くことを表す
  • $:文字列の末尾を表す

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

+------+
| Id   |
+------+
| 99S  |
| 10M  |
+------+
2 rows in set (0.00 sec)

ご覧の通り、「John123」や「123Chris」のように英字が先頭や途中にあるレコードは除外され、「99S」「10M」という条件に完全に一致するレコードだけが出力されました。

応用:桁数を変更したい場合

数字の桁数を変えたい場合は、中括弧「{}」を使った繰り返し指定が便利です。例えば、数字3桁+英字1文字の形式を取得したい場合は、次のように記述できます。

select *from DemoTable where Id regexp '^[0-9]{3}[A-Z]$';

まとめ

MySQLでは、REGEXPと正規表現パターン「^[0-9][0-9][A-Z]$」を組み合わせることで、数字と英字が組み合わされた特定形式のレコードを簡単に抽出できます。LIKE句では実現できない柔軟なパターンマッチングが必要な場面で、ぜひ活用してみてください。

  1. 【MySQL】全レコードを一括更新して先頭の文字だけ大文字にし、残りを小文字に変換するクエリ

    はじめに MySQLでは、カラム内の文字列の先頭の文字だけを大文字にし、残りの文字をすべて小文字に変換したいケースがあります。本記事では、CONCAT()、UPPER()、LOWER()、LEFT()、SUBSTRING()といった文字列関数を組み合わせたUPDATEクエリを使って、テーブル内のすべてのレコードを一括更新する方法を解説します。 サンプルテーブルの作成 まず、テーブルを作成しましょう。 mysql> create table DemoTable2017 -> ( -> Name text -> ); Query OK, 0 rows

  2. MySQLで列の値から先頭の1文字を取り出し、別の列に挿入する方法

    はじめにMySQLである列(カラム)の値から先頭の1文字を取り出し、それを別の列に格納したい場合があります。このようなときに便利なのが LEFT() 関数です。LEFT() 関数は、文字列の左端から指定した文字数だけを抽出することができます。ここでは、実際にテーブルを作成しながら、その手順を順番に解説していきます。1. テーブルを作成するまず、サンプル用のテーブルを作成しましょう。ここでは「FirstLetter」(先頭文字を格納する列)と「Title」(元となる文字列の列)の2つの列を持つテーブルを定義します。mysql> create table DemoTable2036