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です。
-
MySQLクエリで影響を受けた行数の合計を取得する方法
MySQLでは、ROW_COUNT()関数を使用することで、クエリによって影響を受けた行の総数を取得できます。ROW_COUNT()は、直前に実行されたステートメント(INSERT、UPDATE、DELETEなど)によって変更された行数を返す関数です。ここでは具体的な使い方を紹介するために、テーブルへレコードを挿入し、実際に何行が影響を受けたのかを表示するストアドプロシージャを作成してみましょう。ストアドプロシージャの作成例mysql> Delimiter //mysql> CREATE PROCEDURE `query`.`row_cnt` (IN command VarChar
-
MySQLでテーブルの最後の10件のレコードを取得する方法
MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected