MySQLで数値のみを含む値を削除・除外するクエリ|REGEXPの使い方を徹底解説
はじめに
SQL ServerなどではLIKE句で「%[^0-9]%」というパターンが使えますが、MySQLではこの書き方がそのまま機能しません。そこで役立つのがREGEXP演算子です。本記事では、REGEXPを使って数値以外の文字を含む値を抽出する方法を、テーブル作成から実行結果まで順番に解説します。
ステップ1:テーブルを作成する
まず、サンプル用のテーブルを作成しましょう。
mysql> create table DemoTable
-> (
-> ClientCode varchar(100)
-> );
Query OK, 0 rows affected (0.56 sec)ステップ2:レコードを挿入する
INSERTコマンドを使ってテーブルにデータを登録します。ここでは「英字+数字」「英字+記号」「数字のみ」「数字+英字」といった、さまざまな形式の値を意図的に混ぜて登録しています。
mysql> insert into DemoTable values('Chris902');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable values('Robert_');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('903');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('123_David');
Query OK, 1 row affected (0.21 sec)ステップ3:登録内容を確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
出力結果
現在のテーブルの中身は以下の通りです。
+------------+ | ClientCode | +------------+ | Chris902 | | Robert_ | | 903 | | 123_David | +------------+ 4 rows in set (0.00 sec)
ステップ4:REGEXPで数値以外の文字を含む行を抽出する
LIKE句の「%[^0-9]%」はMySQLでは動作しないため、代わりに以下のクエリを実行します。
mysql> select *from DemoTable where ClientCode REGEXP '.*[^0-9].*';
出力結果
このクエリを実行すると、少なくとも1文字でも数字以外の文字(英字やアンダースコアなど)を含むレコードのみが返されます。純粋な数字だけで構成された「903」が除外されている点に注目してください。
+------------+ | ClientCode | +------------+ | Chris902 | | Robert_ | | 123_David | +------------+ 3 rows in set (0.04 sec)
パターンの解説と応用テクニック
- .*[^0-9].*:「任意の文字列」+「0〜9以外の1文字」+「任意の文字列」という意味です。文字列のどこかに非数値文字が含まれていればマッチします。
- [^0-9]:文字クラスの先頭にあるキャレット(^)は否定を表し、数字以外の任意の1文字にマッチします。
- 逆に数値のみの行を取得したい場合は、
ClientCode REGEXP '^[0-9]+$'を使用します。
また、数値のみの値を実際に削除したい場合は、同じ条件をDELETE文に置き換えるだけで対応できます。
mysql> DELETE FROM DemoTable WHERE NOT ClientCode REGEXP '.*[^0-9].*';
このようにREGEXPを活用すれば、LIKE句では実現できない柔軟な文字列パターンによる絞り込みが可能になり、データクリーニングやバリデーション処理にも幅広く応用できます。
-
MySQLクエリで列にユーザー定義の値を追加する方法
MySQLでは、UNION ALLを活用することで、既存の列の値に加えて、ユーザーが自由に定義した値をクエリ結果に追加できます。ここでは、ENUM型の列を持つテーブルを例に、その具体的な手順を解説します。 1. サンプルテーブルの作成 まず、ENUM型のカラムを持つテーブルを作成します。 mysql> create table DemoTable1847 ( GameStatus ENUM(PENDING,COMPLETED,CANCELLED) ); Query OK
-
MySQLでVARCHAR文字列からハイフン以降の数値を削除する方法(SUBSTRING_INDEX活用)
MySQLで「John-232」のようなハイフンを含むVARCHAR型の文字列から、ハイフン以降の数値部分を削除したい場合があります。このような処理には、SUBSTRING_INDEX() 関数を使用すると簡単に実現できます。SUBSTRING_INDEX()関数とはSUBSTRING_INDEX(文字列, 区切り文字, 出現回数) は、指定した区切り文字が現れる位置より前の部分文字列を返す関数です。第3引数に「1」を指定すると、区切り文字が最初に出現する位置より前の文字列だけが取得されます。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create t