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

MySQLで先頭が0〜9の数字である行のみを選択・抽出する方法

カラムの値の先頭が0~9の数字で始まる行だけを抽出するには、RLIKE演算子(REGEXPと同義)を使って正規表現によるパターンマッチを行います。

基本となる構文は次のとおりです。

select *from yourTableName where yourColumnName RLIKE '^[0-9]+'

「^」は文字列の先頭を表し、「[0-9]+」は数字が1文字以上続くことを意味します。したがって、このパターンに一致するのは「先頭が数字の文字列」です。

1. サンプルテーブルを作成する

まず、動作確認用のテーブルを作成しましょう。

mysql> create table DemoTable
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    QuestionNumber varchar(200)
);
Query OK, 0 rows affected (0.56 sec)

2. レコードを挿入する

INSERTコマンドでいくつかのレコードを登録します。

mysql> insert into DemoTable(QuestionNumber) values('1Question');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable(QuestionNumber) values('Question2');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(QuestionNumber) values('311Question');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(QuestionNumber) values('45Question');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(QuestionNumber) values('Question10');
Query OK, 1 row affected (0.13 sec)

3. 登録済みレコードを確認する

SELECT文でテーブル内の全レコードを表示してみます。

mysql> select *from DemoTable;

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

+----+----------------+
| Id | QuestionNumber |
+----+----------------+
| 1  | 1Question      |
| 2  | Question2      |
| 3  | 311Question    |
| 4  | 45Question     |
| 5  | Question10     |
+----+----------------+
5 rows in set (0.00 sec)

4. 先頭が数字の行だけを抽出する

それでは本題です。先頭の文字が0~9の数字である行のみを選択するクエリは次のようになります。

mysql> select *from DemoTable where QuestionNumber RLIKE '^[0-9]+';

実行結果:

+----+----------------+
| Id | QuestionNumber |
+----+----------------+
| 1  | 1Question      |
| 3  | 311Question    |
| 4  | 45Question     |
+----+----------------+
3 rows in set (0.03 sec)

「Question2」「Question10」のようなアルファベット始まりの行は除外され、「1Question」「311Question」「45Question」といった数字始まりの行だけが取得できています。

補足:REGEXPとの関係や応用

RLIKEはREGEXPの別名(シノニム)のため、where QuestionNumber REGEXP '^[0-9]+'としてもまったく同じ結果になります。また、文字列全体が数字のみで構成されている行に絞りたい場合は、終端を示す「$」を加えて'^[0-9]+$'というパターンを使えばOKです。

  1. MySQLクエリで影響を受けた行数の合計を取得する方法

    MySQLでは、ROW_COUNT()関数を使用することで、クエリによって影響を受けた行の総数を取得できます。ROW_COUNT()は、直前に実行されたステートメント(INSERT、UPDATE、DELETEなど)によって変更された行数を返す関数です。ここでは具体的な使い方を紹介するために、テーブルへレコードを挿入し、実際に何行が影響を受けたのかを表示するストアドプロシージャを作成してみましょう。ストアドプロシージャの作成例mysql> Delimiter //mysql> CREATE PROCEDURE `query`.`row_cnt` (IN command VarChar

  2. MySQLでテーブルの最後の10件のレコードを取得する方法

    MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected