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

MySQLで数字で終わるレコードの文字列を取得する方法(REGEXP活用)

数字で終わる文字列を抽出するには

MySQLで「数字で終わる文字列」を持つレコードを取得したい場合は、正規表現によるパターンマッチングが可能な REGEXP 演算子を使用します。基本の構文は以下のとおりです。

select * from テーブル名 where カラム名 REGEXP '[[:digit:]]$';

ここで [[:digit:]]$ は「文字列の末尾が0〜9のいずれかの数字であること」を意味する正規表現パターンです。それでは、実際にテーブルを作成して動作を確認してみましょう。

サンプルテーブルの作成

まず、以下のクエリでテーブルを作成します。

mysql> create table StringEndsWithNumber
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> UserId varchar(20),
-> UserName varchar(20)
-> );
Query OK, 0 rows affected (0.62 sec)

テストデータの挿入

次に、INSERT文を使っていくつかのレコードを挿入します。数字で終わるUserIdと、そうでないUserIdを混ぜて登録しています。

mysql> insert into StringEndsWithNumber(UserId,UserName) values('123User','John');
Query OK, 1 row affected (0.18 sec)
mysql> insert into StringEndsWithNumber(UserId,UserName) values('User456','Larry');
Query OK, 1 row affected (0.19 sec)
mysql> insert into StringEndsWithNumber(UserId,UserName) values('User789','John');
Query OK, 1 row affected (0.12 sec)
mysql> insert into StringEndsWithNumber(UserId,UserName) values('0981User','Carol');
Query OK, 1 row affected (0.17 sec)
mysql> insert into StringEndsWithNumber(UserId,UserName) values('User999','Bob');
Query OK, 1 row affected (0.14 sec)
mysql> insert into StringEndsWithNumber(UserId,UserName) values('User1290','David');
Query OK, 1 row affected (0.37 sec)
mysql> insert into StringEndsWithNumber(UserId,UserName) values('User456','James');
Query OK, 1 row affected (0.21 sec)

登録データの確認

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

mysql> select * from StringEndsWithNumber;

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

+----+----------+----------+
| Id | UserId | UserName |
+----+----------+----------+
| 1 | 123User | John |
| 2 | User456 | Larry |
| 3 | User789 | John |
| 4 | 0981User | Carol |
| 5 | User999 | Bob |
| 6 | User1290 | David |
| 7 | User456 | James |
+----+----------+----------+
7 rows in set (0.00 sec)

数字で終わるレコードだけを抽出するクエリ

それでは、UserIdが数字で終わっているレコードのみを取得してみましょう。REGEXP演算子を使った実際のクエリは以下のとおりです。

mysql> select * from StringEndsWithNumber where UserId REGEXP '[[:digit:]]$';

実行結果は次のようになります。

+----+----------+----------+
| Id | UserId | UserName |
+----+----------+----------+
| 2 | User456 | Larry |
| 3 | User789 | John |
| 5 | User999 | Bob |
| 6 | User1290 | David |
| 7 | User456 | James |
+----+----------+----------+
5 rows in set (0.11 sec)

結果のポイント

上記の出力を見ると、「123User」「0981User」のように先頭が数字で始まるレコードは除外され、「User456」「User789」「User999」「User1290」のように末尾が数字で終わる5件のレコードだけが正しく抽出されていることがわかります。

補足:LIKE句との違い

同様の処理は LIKE 'User%' のようにLIKE句でも部分的に実現できますが、LIKE句では「末尾が任意の数字である」という柔軟な条件指定ができません。数字そのものを判定したい場合や、より複雑なパターンマッチングを行いたい場合は、REGEXP演算子を使うのが確実で便利です。また、MySQL 8.0以降では [[:digit:]] の代わりにICU(Unicode対応)の正規表現も利用できるため、マルチバイト文字を含むデータでも安心して使えます。

  1. MySQLでファイル名が格納された列からファイル拡張子のみを取得する方法

    MySQLで「AddTwoNumber.java」や「vector.cpp」のようなファイル名が文字列として保存されている列から、拡張子の部分だけを取り出したいケースはよくあります。このような場合には、substring_index() 関数を使用するのが最も簡単な方法です。substring_index()関数の構文substring_index() 関数は、指定した区切り文字を基準に文字列を分割し、その一部を取得できる関数です。第3引数に -1 を指定すると、区切り文字より後ろ側(右端)の部分文字列を返します。つまり、ドット(.)を区切り文字にすれば、ファイル名の末尾にある拡張子だけを抜き

  2. JavaでMySQLデータベースのテーブルから最後のレコードを取得する方法

    MySQLデータベースからデータを取得するには、JavaのexecuteQuery()メソッドを使用します。本記事では、テーブルに登録された最後のレコード(最新の1件)をJavaプログラムで取得する手順を、サンプルコード付きでわかりやすく解説します。1. MySQLデータベースにテーブルを作成するまず、MySQLデータベース上にテーブルを用意します。ここでは「sample」データベースに、以下のようなテーブルを作成します。mysql> create table javaGetDataDemo -> ( -> Id int NOT NULL AUTO_INCREMENT PRI