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

MySQLでカンマ区切りの値の中から特定の文字列を検索する方法(REGEXP活用)

カンマ区切りで保存された値の中から特定の文字列を検索したい場合、MySQLではREGEXP(正規表現)を使うのが効果的です。この記事では、実際にテーブルを作成し、カンマ区切りの値の中から「MySQL」という文字列を正確に抽出する手順を解説します。

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

まず、検索対象となるテーブルを作成します。

mysql> create table DemoTable1902
    (
    Subjects text
    );
Query OK, 0 rows affected (0.00 sec)

2. テストデータの挿入

INSERT文を使って、カンマ区切りの値を持つレコードをいくつか登録します。

mysql> insert into DemoTable1902 values('MongoDB,Java,Python');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1902 values('SQL Server,MySQL,PL/SQL');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1902 values('Hibernate,Spring,JPA');
Query OK, 1 row affected (0.00 sec)

3. 登録データの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select * from DemoTable1902;

実行結果は以下のとおりです。

+-------------------------+
| Subjects                |
+-------------------------+
| MongoDB,Java,Python     |
| SQL Server,MySQL,PL/SQL |
| Hibernate,Spring,JPA    |
+-------------------------+
3 rows in set (0.00 sec)

4. REGEXPで特定の文字列を検索する

ここが本題です。カンマ区切りの値の中から「MySQL」に完全一致する要素を持つ行だけを抽出するクエリがこちらです。

mysql> select * from DemoTable1902
    where Subjects regexp '(^|.*,)MySQL(,.*|$)';

実行すると、次のような結果が得られます。

+-------------------------+
| Subjects                |
+-------------------------+
| SQL Server,MySQL,PL/SQL |
+-------------------------+
1 row in set (0.00 sec)

正規表現パターンの解説

使用したパターン '(^|.*,)MySQL(,.*|$)' の意味は以下のとおりです。

  • (^|.*,):文字列の先頭であるか、またはカンマの直後であることを示します。これにより「MySQL」という語が要素の先頭に来るケースに対応します。
  • MySQL:検索したい完全一致の文字列です。
  • (,.*|$):直後にカンマが続くか、または文字列の末尾であることを示します。これにより「MySQLServer」のような部分一致を防ぎます。

まとめ

LIKE句での単純な部分一致検索では、「MySQL」を含む「MySQLServer」なども誤ってヒットしてしまう可能性があります。REGEXPを利用してカンマ区切りの境界を明示的に判定することで、CSV形式のように格納された値の中から目的の要素だけを正確に検索できます。正規化されたテーブル設計が理想ですが、既存のカンマ区切りデータを扱う際には非常に便利なテクニックです。

  1. MySQLでテーブル内の^(キャレット)文字を検索する方法

    MySQLで^文字を検索するには?MySQLのテーブルやカラム名に含まれる^(キャレット)文字を検索したい場合は、LIKE演算子を使用します。特に、information_schemaデータベースのcolumnsテーブルを参照することで、データベース全体から^を含むカラム名を効率的に特定できます。基本の検索構文以下の構文を使用して、^文字を含むカラムを検索できます。select table_schema, table_name, column_namefrom information_schema.columnswhere column_name like %^%;このクエリは、スキーマ名(t

  2. MySQLでランダムな行を取得する方法|ORDER BY RAND()を使った抽出テクニック

    MySQLでランダムな行を取得する基本MySQLでランダムに行を取得したい場合、最も手軽な方法は ORDER BY RAND() を使うことです。この記事では、カンマ区切りの値を格納したデータを例に、特定の値を除外しながらランダムに行を抽出する方法をステップごとに解説します。1. サンプルテーブルを作成するまず、IDのリストを保存するためのシンプルなテーブルを作成します。mysql> create table DemoTable1835    (    ListOfIds varchar(20) &