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

MySQLで数値のみの行を抽出するREGEXPクエリの使い方

文字列と数字が混在するデータの中から、数値だけで構成された行だけを取り出したい場合、MySQLのREGEXP演算子を使うのが便利です。正規表現パターン「^[0-9]+$」を指定することで、先頭から末尾まですべてが0〜9の数字で構成されている行のみを絞り込むことができます。

サンプルテーブルの作成

まず、検証用のテーブルを作成します。

mysql> create table DemoTable
    -> (
    -> StudentId varchar(100)
    -> );
Query OK, 0 rows affected (0.51 sec)

レコードの挿入

次に、insertコマンドでいくつかのレコードを挿入します。ここでは、英字と数字が混ざったデータやハイフンを含むデータ、純粋な数字のみのデータなど、さまざまなパターンを用意しています。

mysql> insert into DemoTable values('John74747');
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable values('8494575Carol');
Query OK, 1 row affected (0.19 sec)

mysql> insert into DemoTable values('985755645');
Query OK, 1 row affected (0.13 sec)

mysql> insert into DemoTable values('Carol-9032');
Query OK, 1 row affected (0.16 sec)

mysql> insert into DemoTable values('101');
Query OK, 1 row affected (0.17 sec)

全レコードの確認

select文でテーブル内のすべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

出力結果

+--------------+
| StudentId    |
+--------------+
| John74747    |
| 8494575Carol |
| 985755645    |
| Carol-9032   |
| 101          |
+--------------+
5 rows in set (0.00 sec)

数値のみの行を返すクエリ

以下が、数値だけで構成された行のみを返すクエリです。WHERE句の中でREGEXP演算子に正規表現パターンを渡します。

mysql> select *from DemoTable where StudentId REGEXP '^[0-9]+$';

出力結果

+-----------+
| StudentId |
+-----------+
| 985755645 |
| 101       |
+-----------+
2 rows in set (0.17 sec)

正規表現パターンの解説

使用した正規表現「^[0-9]+$」の各要素は、次のような意味を持っています。

  • ^:文字列の先頭を表します
  • [0-9]:0から9までのいずれか1文字の数字に一致します
  • +:直前のパターンが1回以上繰り返されることを意味します
  • $:文字列の末尾を表します

このパターンにより、「John74747」や「8494575Carol」、「Carol-9032」のように英字や記号を含む行はすべて除外され、「985755645」と「101」のような純粋な数値の行だけが結果として返されます。なお、小数点やマイナス符号を含む数値も対象にしたい場合は、パターンを「^-?[0-9]+(\.[0-9]+)?$」のように拡張することで対応できます。

  1. MySQLで文字列の先頭15文字だけを表示するクエリの書き方

    MySQLで文字列の先頭(左側)から指定した文字数だけを取り出すには、LEFT()関数を使用します。第1引数に対象の文字列、第2引数に取得したい文字数を指定するだけで、手軽に部分文字列を抽出できます。 この記事では、テーブルに登録されたタイトルの先頭15文字だけを表示する方法を、実際のSQLと実行結果付きで順を追って解説します。 1. サンプルテーブルを作成する まず、CREATE TABLE文でテーブルを作成します。 mysql> create table DemoTable     -> (    &nbs

  2. MySQLで列の値ごとに「NO」の件数のみをカウントして返すクエリの書き方

    MySQLでは、SUM()関数と条件式を組み合わせることで、グループごとに特定の値(この例では「NO」)が出現した回数だけをカウントできます。ここでは、ENUM型のカラムを持つテーブルを例に、「NO」の件数のみを集計する方法を具体的な手順とともに解説します。 1. テーブルを作成する まず、サンプル用のテーブルを作成します。isTopperカラムはENUM型で、「YES」または「NO」のいずれかの値を持ちます。 mysql> create table DemoTable1829      (      Name varchar(