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

MySQLのREGEXP演算子でハイフン区切りの数字のみを抽出・表示する方法

MySQLでは、REGEXP演算子(正規表現)を使うことで、特定のパターンに一致するレコードだけを柔軟に抽出できます。本記事では、テーブル内の文字列データの中から「ハイフンで区切られた数字のみ」で構成される値を検索して表示する方法を、具体的なSQL例とともに解説します。

1. サンプルテーブルの作成

まず、検索対象となるテーブルを作成しましょう。ここでは、varchar型のカラムを持つシンプルなテーブルを用意します。

mysql> create table DemoTable
    (
      Code varchar(100)
    );
Query OK, 0 rows affected (1.16 sec)

テストデータの挿入

続いて、INSERT文で複数のレコードを追加します。あえて「数字+名前」が混ざったデータも含めておくことで、正規表現による絞り込み効果が分かりやすくなります。

mysql> insert into DemoTable values('100-677-9876');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable values('100-677-9876-John');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('David-100-677-9876');
Query OK, 1 row affected (0.16 sec)

この状態では、テーブルには次のような3種類のデータが格納されています。

  • 数字とハイフンのみで構成された値(電話番号形式)
  • 末尾に名前が付いた値
  • 先頭に名前が付いた値

2. 登録済みデータの確認

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

mysql> select *from DemoTable;

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

+--------------------+
| Code               |
+--------------------+
| 100-677-9876       |
| 100-677-9876-John  |
| David-100-677-9876 |
+--------------------+
3 rows in set (0.00 sec)

3. REGEXPでハイフン区切りの数字のみを表示する

ここで本題です。次の正規表現パターンをREGEXP演算子に指定すると、「先頭から末尾までが3桁+3桁+4桁の数字で構成され、間が空白またはハイフンで区切られている値」だけを抽出できます。

mysql> select *from DemoTable where Code REGEXP '^\\(?[0-9]{3}\\)?[\\s-]?[0-9]{3}[\\s-]?[0-9]{4}$';

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

+--------------+
| Code         |
+--------------+
| 100-677-9876 |
+--------------+
1 row in set (0.00 sec)

ご覧の通り、「100-677-9876-John」や「David-100-677-9876」といった名前を含むレコードは除外され、純粋にハイフン区切りの数字のみで構成されたレコードだけが表示されました。

正規表現パターンの解説

使用したパターン「^\\(?[0-9]{3}\\)?[\\s-]?[0-9]{3}[\\s-]?[0-9]{4}$」の各要素は次の意味を持ちます。

  • ^:文字列の先頭を表します。これにより、途中から一致するだけのレコード(例:David-100-677-9876)を排除できます。
  • \\(? 〜 \\)?:括弧「()」があってもなくても一致する任意指定のグループです。
  • [0-9]{3}:3桁の数字に一致します。
  • [\\s-]?:空白またはハイフンが0回または1回出現することを許容します。
  • $:文字列の末尾を表します。末尾に余計な文字(例:John)が付いているレコードを排除できます。

まとめ

MySQLのREGEXP演算子を使えば、LIKE句では難しい複雑なパターンマッチングも簡単に実現できます。特に^(先頭)と$(末尾)を組み合わせて完全一致のパターンを定義することが、不要なレコードを除外するポイントです。電話番号や郵便番号など、決まった形式のデータを検証・抽出したい場面でぜひ活用してください。

  1. 【JavaScript】正規表現で名前が半角英数字・アンダースコアのみかどうかを判定する方法

    本記事では、JavaScriptの正規表現を使って、入力された名前(テキスト)が「数字・英字・アンダースコア」のみで構成されているかどうかをチェックする方法を解説します。 使用する正規表現 今回使用する正規表現は以下の通りです。 /^\w+$/ 各要素の意味は次の通りです。 ^ … 文字列の先頭を表します \w+ … 半角英字(a〜z、A〜Z)、数字(0〜9)、アンダースコア(_)のいずれかに1文字以上連続でマッチします $ … 文字列の末尾を表します つまり、文字列全体が英数字とアンダースコアだけで構成されている場合にのみマッチし、空白や他の記号が含まれるとマッチしなくなります。 サ

  2. C#で数値のみにマッチする正規表現の書き方

    正規表現(Regular Expression)とは、入力されたテキストとの一致を判定するためのパターンのことです。.NET Framework には、こうしたパターンマッチングを実現する正規表現エンジンが組み込まれており、C# から簡単に利用することができます。正規表現のパターンは、1つ以上の文字リテラル・演算子・構成要素を組み合わせて作ります。数値だけにマッチさせるパターンを理解するために、まず基本となるメタ文字を確認しておきましょう。正規表現の基本メタ文字* = 直前の要素の0回以上の繰り返し ? = 直前の要素が0回または1回 ^ = 文字列の先頭([] 内では否定条件) [] = 括