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句では実現できない柔軟なパターンマッチングが必要な場面で、ぜひ活用してみてください。
-
【MySQL】全レコードを一括更新して先頭の文字だけ大文字にし、残りを小文字に変換するクエリ
はじめに MySQLでは、カラム内の文字列の先頭の文字だけを大文字にし、残りの文字をすべて小文字に変換したいケースがあります。本記事では、CONCAT()、UPPER()、LOWER()、LEFT()、SUBSTRING()といった文字列関数を組み合わせたUPDATEクエリを使って、テーブル内のすべてのレコードを一括更新する方法を解説します。 サンプルテーブルの作成 まず、テーブルを作成しましょう。 mysql> create table DemoTable2017 -> ( -> Name text -> ); Query OK, 0 rows
-
MySQLで列の値から先頭の1文字を取り出し、別の列に挿入する方法
はじめにMySQLである列(カラム)の値から先頭の1文字を取り出し、それを別の列に格納したい場合があります。このようなときに便利なのが LEFT() 関数です。LEFT() 関数は、文字列の左端から指定した文字数だけを抽出することができます。ここでは、実際にテーブルを作成しながら、その手順を順番に解説していきます。1. テーブルを作成するまず、サンプル用のテーブルを作成しましょう。ここでは「FirstLetter」(先頭文字を格納する列)と「Title」(元となる文字列の列)の2つの列を持つテーブルを定義します。mysql> create table DemoTable2036