MySQLで特殊文字を含む列の値のみを抽出するREGEXPクエリの書き方
REGEXPを使った特殊文字レコードの抽出方法
MySQLで、特殊文字を含むレコードだけを取り出したい場合はREGEXP演算子(正規表現)を使うのが便利です。この記事では、英数字以外の文字が含まれる行を抽出する手順を、テーブル作成から順番に解説します。
サンプルテーブルの作成
まず、テーブルを作成しましょう。
mysql> create table DemoTable(SubjectCode varchar(100)); Query OK, 0 rows affected (0.89 sec)
テストデータの挿入
次に、INSERTコマンドでテキスト・数字・特殊文字が混在したレコードを挿入します。
mysql> insert into DemoTable values('Java899@22');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('C#');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('~Python232');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('MongoDB%');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable values('C123456');
Query OK, 1 row affected (0.37 sec)登録済みレコードの確認
SELECT文ですべてのレコードを表示してみます。
mysql> select *from DemoTable;
実行結果は以下の通りです。
+-------------+ | SubjectCode | +-------------+ | Java899@22 | | C# | | ~Python232 | | MongoDB% | | C123456 | +-------------+ 5 rows in set (0.00 sec)
特殊文字を含む値だけを取得するクエリ
以下のクエリを実行すると、特殊文字を含むレコードのみを抽出できます。
mysql> select *from DemoTable where SubjectCode regexp '[^a-zA-Z0-9\&]';
実行結果は次のようになります。
+-------------+ | SubjectCode | +-------------+ | Java899@22 | | C# | | ~Python232 | | MongoDB% | +-------------+ 4 rows in set (0.00 sec)
正規表現パターンのポイント
このクエリで使われているパターン「[^a-zA-Z0-9]」は、英字(a〜z、A〜Z)と数字(0〜9)以外の任意の1文字を意味します。カラムの値の中にこのパターンに一致する文字が1つでも含まれていれば、その行が抽出対象になります。
そのため、「Java899@22」「C#」「~Python232」「MongoDB%」のように @、#、~、% などの特殊文字を含む4件のレコードが返され、英数字だけで構成されている「C123456」は除外されます。このようにREGEXPの否定文字クラスを使えば、データのクリーニングや入力チェックなど、さまざまな場面で特殊文字を含むデータを簡単に見つけられます。
-
MySQLのREPLACE関数で列の値に含まれる文字列を一括置換する方法
はじめにMySQLでは、UPDATE文とREPLACE()関数を組み合わせることで、テーブルの列に含まれる特定の文字列(特殊文字など)を簡単に一括置換できます。この記事では、実際のサンプルコードを使ってその手順をわかりやすく解説します。サンプルテーブルの作成まず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable1574 -> ( -> StudentCode varchar(20) -> );Query OK, 0 rows affected (0.59 sec)レコードの挿入次に、INSERTコマンドを
-
MySQLで列の値ごとに「NO」の件数のみをカウントして返すクエリの書き方
MySQLでは、SUM()関数と条件式を組み合わせることで、グループごとに特定の値(この例では「NO」)が出現した回数だけをカウントできます。ここでは、ENUM型のカラムを持つテーブルを例に、「NO」の件数のみを集計する方法を具体的な手順とともに解説します。 1. テーブルを作成する まず、サンプル用のテーブルを作成します。isTopperカラムはENUM型で、「YES」または「NO」のいずれかの値を持ちます。 mysql> create table DemoTable1829 ( Name varchar(