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と正規表現パターンを組み合わせることで、「特定の番号で始まり、ドットの後に数字が続く」といった柔軟かつ厳密な条件でのレコード抽出が可能になります。エスケープ処理(\.)を忘れないように注意しましょう。
-
MySQLのREGEXPで特定の数値で始まる文字列+数値のレコードを取得する方法
REGEXPを使った特定の数値で始まるレコードの取得方法MySQLでは、REGEXP演算子(正規表現)を使用することで、特定の数値で始まる文字列と数値が混在したレコードを簡単に抽出できます。基本的な構文は以下の通りです。Select yourColumnName1,yourColumnName2 from yourTableName where yourColumnName2 REGEXP ^yourStringValue[yourNumericValue];サンプルテーブルの作成まずは動作確認のためのテーブルを作成しましょう。mysql> create table demo45 -&g
-
MySQLで特定の番号を含むレコードをすべて選択する方法|FIND_IN_SET()関数の使い方
MySQLで、カンマ区切りの値の中に特定の番号が含まれているレコードをすべて抽出したい場合は、FIND_IN_SET() 関数を使用します。この関数は、文字列リストの中から指定した値が何番目に存在するかを返し、見つからない場合は 0 を返します。そのため、結果が 0 より大きいかどうかを条件にすることで、目的の番号を含むレコードだけを取得できます。ここでは、実際にテーブルを作成して動作を確認してみましょう。1. テーブルの作成まず、サンプル用のテーブルを作成します。mysql> create table demo73 -> ( -> interest_id v