【MySQL】正規表現(REGEXP)で数字のみの行を抽出する方法
MySQLのREGEXPで数字のみを抽出するには
MySQLでREGEXP(正規表現)を使用して、数字のみで構成されたデータを取得したい場合は、WHERE句で正規表現「^[0-9]*$」を指定します。本記事では、目的に応じた2つのケースに分けて、具体的なクエリの書き方と実行結果を解説します。
ケース1:ちょうど10桁の数字のみの行を抽出する
文字列がちょうど10桁で、かつすべてが数字である行だけを取得したい場合は、以下の正規表現を使用します。
SELECT * FROM yourTableName
WHERE yourColumnName REGEXP '^[0-9]{10}$';
ケース2:1桁以上の数字のみの行を抽出する
1桁以上の数字のみで構成された行を取得したい場合は、以下の構文を使用します。
SELECT * FROM yourTableName
WHERE yourColumnName REGEXP '^[0-9]*$';
この構文では、数字以外の文字を一切含まない行のみが結果として返されます。
サンプルテーブルの作成とデータ投入
上記の構文の動作を確認するために、まずテーブルを作成します。
mysql> CREATE TABLE OnlyDigits(
Id INT NOT NULL AUTO_INCREMENT,
UserId VARCHAR(20),
UserName VARCHAR(20),
PRIMARY KEY(Id)
);
次に、テストデータを挿入します。クエリは以下の通りです。
mysql> insert into OnlyDigits(UserId, UserName) values('123User1','John');
Query OK, 1 row affected (0.16 sec)
mysql> insert into OnlyDigits(UserId, UserName) values('3445User2','Carol');
Query OK, 1 row affected (0.19 sec)
mysql> insert into OnlyDigits(UserId, UserName) values('145363User3','Mike');
Query OK, 1 row affected (0.20 sec)
mysql> insert into OnlyDigits(UserId, UserName) values('13455User4','Larry');
Query OK, 1 row affected (0.22 sec)
mysql> insert into OnlyDigits(UserId, UserName) values('123555User5','Sam');
Query OK, 1 row affected (0.15 sec)
mysql> insert into OnlyDigits(UserId, UserName) values('596766User6','David');
Query OK, 1 row affected (0.24 sec)
mysql> insert into OnlyDigits(UserId, UserName) values('96977User7','Robert');
Query OK, 1 row affected (0.15 sec)
mysql> insert into OnlyDigits(UserId, UserName) values('99999User8','James');
Query OK, 1 row affected (0.20 sec)
mysql> insert into OnlyDigits(UserId, UserName) values('9999999','James');
Query OK, 1 row affected (0.13 sec)
mysql> insert into OnlyDigits(UserId, UserName) values('153545','Maxwell');
Query OK, 1 row affected (0.23 sec)
mysql> insert into OnlyDigits(UserId, UserName) values('9999986787','Johnson');
Query OK, 1 row affected (0.20 sec)SELECT文を使って、テーブルの全レコードを表示してみましょう。
mysql> select *from OnlyDigits;
以下が出力結果です。
+----+-------------+----------+
| Id | UserId | UserName |
+----+-------------+----------+
| 1 | 123User1 | John |
| 2 | 3445User2 | Carol |
| 3 | 145363User3 | Mike |
| 4 | 13455User4 | Larry |
| 5 | 123555User5 | Sam |
| 6 | 596766User6 | David |
| 7 | 96977User7 | Robert |
| 8 | 99999User8 | James |
| 9 | 9999999 | James |
| 10 | 153545 | Maxwell |
| 11 | 9999986787 | Johnson |
+----+-------------+----------+
11 rows in set (0.00 sec)
ケース1の実行例:ちょうど10桁の数字を抽出
文字列がちょうど10桁で、すべてが数字である行を取得するクエリは以下の通りです。
mysql> select *from OnlyDigits
-> where UserId REGEXP '^[0-9]{10}$';
以下が出力結果です。
+----+------------+----------+
| Id | UserId | UserName |
+----+------------+----------+
| 11 | 9999986787 | Johnson |
+----+------------+----------+
1 row in set (0.00 sec)
なお、ケース1と同じ結果は、POSIX文字クラス「[[:digit:]]」を使った次の正規表現でも得られます。
mysql> select *from OnlyDigits
-> where UserId REGEXP '^[[:digit:]]{10}$';
以下が出力結果です。
+----+------------+----------+
| Id | UserId | UserName |
+----+------------+----------+
| 11 | 9999986787 | Johnson |
+----+------------+----------+
1 row in set (0.00 sec)
ケース2の実行例:1桁以上の数字のみを抽出
1桁以上の数字のみで構成された行を取得するクエリは以下の通りです。
mysql> select *from OnlyDigits
-> where UserId REGEXP '^[0-9]*$';
以下が出力結果です。
+----+------------+----------+
| Id | UserId | UserName |
+----+------------+----------+
| 9 | 9999999 | James |
| 10 | 153545 | Maxwell |
| 11 | 9999986787 | Johnson |
+----+------------+----------+
3 rows in set (0.00 sec)
まとめ
MySQLのREGEXP演算子を使えば、カラムの値が数字のみで構成されているかどうかを簡単に判定できます。「^[0-9]{10}$」のように桁数を指定すれば固定桁数の数字のみを、「^[0-9]*$」のように書けば任意の桁数の数字のみを抽出できます。ただし「*」は0回以上の繰り返しを意味するため、空文字列にもマッチする点に注意してください。1桁以上を厳密に指定したい場合は「^[0-9]+$」を使用するとより安全です。
-
MySQLで特定の行から単一の値だけを取得する方法(SELECT INTOの使い方)
MySQLで特定の条件に一致する行から、単一の値だけを変数に取得したい場合は、SELECT ... INTO 変数構文とWHERE句を組み合わせて使用します。この記事では、実際のテーブル作成から値の取得までの手順を順番に解説します。 1. サンプルテーブルを作成する まずは動作確認用のテーブルを作成しましょう。学生ID・氏名・点数を持つシンプルなテーブルを定義します。 mysql> create table DemoTable1896 ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentName
-
MySQLストアドプロシージャでIN()を使って特定のレコードのみを取得する方法
MySQLのストアドプロシージャ内でIN()を使用すると、条件に一致する特定のレコードだけを柔軟に取得できます。ここでは、実際の手順をサンプルコードとともに解説します。1. サンプルテーブルの作成まず、テーブルを作成します。mysql> create table DemoTable2004 ( UserId varchar(20), UserName varchar(20) ); Query OK, 0 rows affected (0.57 sec)2. レコードの挿入次に、INSERTコマンドを使ってテーブルにレコードを挿入します。mysql> insert i