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

MySQLでドットを含む文字列から特定の番号で始まるレコードを抽出する方法|LIKEが使えない場合のREGEXP活用術

MySQLでは、ドット(ピリオド)を含む文字列を扱いながら「特定の番号で始まるレコード」だけを表示したい場合、LIKE句ではなくREGEXP(正規表現)を使用する必要があります。本記事では、実際にテーブルを作成し、REGEXPを使った抽出クエリの実行手順を具体的に解説します。

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

まずは、ゲームのリリースバージョンを格納するテーブルを作成します。

mysql> create table DemoTable
    -> (
    -> GameReleaseVersion varchar(20)
    -> );
Query OK, 0 rows affected (0.57 sec)

2. テストデータの挿入

次に、insertコマンドを使ってサンプルデータを登録します。ドットを含むバージョン番号を複数挿入してみましょう。

mysql> insert into DemoTable values('19.6');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('18.4');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('17.6');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('19.5');
Query OK, 1 row affected (0.14 sec)

3. 登録データの確認

select文ですべてのレコードを表示して、データが正しく登録されているか確認します。

mysql> select *from DemoTable;

実行すると、以下のような結果が出力されます。

+--------------------+
| GameReleaseVersion |
+--------------------+
| 19.6               |
| 18.4               |
| 17.6               |
| 19.5               |
+--------------------+
4 rows in set (0.00 sec)

4. REGEXPを使った条件付き抽出

ここが本題です。ドットを含む文字列に対応したクエリを見ていきましょう。次の例では、「19」で始まり、その後にドットと数字が続くレコードのみを取得しています。

mysql> select *from DemoTable
    -> where GameReleaseVersion regexp '^19\.[0-9]+$';

このクエリを実行すると、以下の出力が得られます。

+--------------------+
| GameReleaseVersion |
+--------------------+
| 19.6               |
| 19.5               |
+--------------------+
2 rows in set (0.15 sec)

正規表現パターンの解説

使用したパターン '^19\.[0-9]+$' の意味は以下の通りです。

  • ^:文字列の先頭を表します(「19」で始まることを保証)
  • 19:先頭に一致させたい番号
  • \.:ドットそのものに一致させます。正規表現ではドットが「任意の一文字」を意味するため、バックスラッシュでエスケープが必要です
  • [0-9]+:ドットの後に1桁以上の数字が続くことを指定
  • $:文字列の末尾を表します

まとめ

ドットを含むバージョン番号などの文字列に対して前方一致検索を行う場合、単純なLIKE句では意図した結果が得られないことがあります。REGEXPと正規表現パターンを組み合わせることで、「特定の番号で始まり、ドットの後に数字が続く」といった柔軟かつ厳密な条件でのレコード抽出が可能になります。エスケープ処理(\.)を忘れないように注意しましょう。

  1. MySQLのREGEXPで特定の数値で始まる文字列+数値のレコードを取得する方法

    REGEXPを使った特定の数値で始まるレコードの取得方法MySQLでは、REGEXP演算子(正規表現)を使用することで、特定の数値で始まる文字列と数値が混在したレコードを簡単に抽出できます。基本的な構文は以下の通りです。Select yourColumnName1,yourColumnName2 from yourTableName where yourColumnName2 REGEXP ^yourStringValue[yourNumericValue];サンプルテーブルの作成まずは動作確認のためのテーブルを作成しましょう。mysql> create table demo45 -&g

  2. MySQLで特定の番号を含むレコードをすべて選択する方法|FIND_IN_SET()関数の使い方

    MySQLで、カンマ区切りの値の中に特定の番号が含まれているレコードをすべて抽出したい場合は、FIND_IN_SET() 関数を使用します。この関数は、文字列リストの中から指定した値が何番目に存在するかを返し、見つからない場合は 0 を返します。そのため、結果が 0 より大きいかどうかを条件にすることで、目的の番号を含むレコードだけを取得できます。ここでは、実際にテーブルを作成して動作を確認してみましょう。1. テーブルの作成まず、サンプル用のテーブルを作成します。mysql> create table demo73 -> ( -> interest_id v