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

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の否定文字クラスを使えば、データのクリーニングや入力チェックなど、さまざまな場面で特殊文字を含むデータを簡単に見つけられます。

  1. MySQLのREPLACE関数で列の値に含まれる文字列を一括置換する方法

    はじめにMySQLでは、UPDATE文とREPLACE()関数を組み合わせることで、テーブルの列に含まれる特定の文字列(特殊文字など)を簡単に一括置換できます。この記事では、実際のサンプルコードを使ってその手順をわかりやすく解説します。サンプルテーブルの作成まず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable1574 -> ( -> StudentCode varchar(20) -> );Query OK, 0 rows affected (0.59 sec)レコードの挿入次に、INSERTコマンドを

  2. MySQLで列の値ごとに「NO」の件数のみをカウントして返すクエリの書き方

    MySQLでは、SUM()関数と条件式を組み合わせることで、グループごとに特定の値(この例では「NO」)が出現した回数だけをカウントできます。ここでは、ENUM型のカラムを持つテーブルを例に、「NO」の件数のみを集計する方法を具体的な手順とともに解説します。 1. テーブルを作成する まず、サンプル用のテーブルを作成します。isTopperカラムはENUM型で、「YES」または「NO」のいずれかの値を持ちます。 mysql> create table DemoTable1829      (      Name varchar(