MySQLクエリでカンマ区切りの値が含まれる列から特定の数値を検索する方法(FIND_IN_SET活用)
はい、MySQLの FIND_IN_SET() 関数を使えば、カンマ区切りで保存された数値のリストから特定の値を検索できます。この関数は、第2引数に指定したカンマ区切りの文字列の中に、第1引数で指定した値が含まれているかどうかを判定し、見つかった場合はその位置(1始まり)を返します。
サンプルテーブルの作成
まず、検索対象となるテーブルを作成します。
mysql> create table DemoTable
(
ListOfNumbers varchar(100)
);
Query OK, 0 rows affected (1.24 sec)
レコードの挿入
INSERT文でカンマ区切りの数値データを登録します。
mysql> insert into DemoTable values('784,746,894,344');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('456,322,333,456');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('654,785,678,456');
Query OK, 1 row affected (0.47 sec)
mysql> insert into DemoTable values('123,676,847,785');
Query OK, 1 row affected (0.34 sec)
テーブルの内容を確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行結果は以下のとおりです。
+-----------------+ | ListOfNumbers | +-----------------+ | 784,746,894,344 | | 456,322,333,456 | | 654,785,678,456 | | 123,676,847,785 | +-----------------+ 4 rows in set (0.00 sec)
FIND_IN_SET()で特定の数値を検索する
以下のクエリを実行すると、カンマ区切りのリスト内に「456」が含まれるレコードだけを抽出できます。
mysql> select *from DemoTable where find_in_set('456',ListOfNumbers);
実行結果:
+-----------------+ | ListOfNumbers | +-----------------+ | 456,322,333,456 | | 654,785,678,456 | +-----------------+ 2 rows in set (0.28 sec)
利用時の注意点
FIND_IN_SET() は要素の完全一致で判定するため、「45」で検索しても「456」にはマッチしません。また、代わりに LIKE '%456%' を使うと「123,4567」のように別の数値の一部まで誤ってヒットする恐れがあるため、カンマ区切りデータの検索にはFIND_IN_SET()の利用が適しています。
ただし、この関数はインデックスを利用できないため、レコード数が多いテーブルではパフォーマンスが低下する点に注意が必要です。検索頻度が高い場合は、数値を個別の行として持つ中間テーブルを作る正規化設計の方が望ましいでしょう。
-
MySQLでカンマ区切りの値を持つ列から特定のレコードを検索する方法
MySQLでは、カンマ区切りで複数の値が格納された列から特定の値を含むレコードを抽出したいケースがあります。そんなときに便利なのが FIND_IN_SET() 関数です。この関数を使うと、カンマ区切りの文字列の中に指定した値が存在するかどうかを簡単に判定できます。この記事では、実際にテーブルを作成し、FIND_IN_SET() を使って特定のレコードを検索する手順を解説します。1. テーブルの作成まず、カンマ区切りの値を格納するためのテーブルを作成します。mysql> create table DemoTable -> ( -> ListOfValue varch
-
MySQLでカンマ区切りの値の中から特定の文字列を検索する方法(REGEXP活用)
カンマ区切りで保存された値の中から特定の文字列を検索したい場合、MySQLではREGEXP(正規表現)を使うのが効果的です。この記事では、実際にテーブルを作成し、カンマ区切りの値の中から「MySQL」という文字列を正確に抽出する手順を解説します。1. サンプルテーブルの作成まず、検索対象となるテーブルを作成します。mysql> create table DemoTable1902 ( Subjects text ); Query OK, 0 rows affected (0.00 sec)2. テストデータの挿入INSERT文を使って、カンマ区切りの値を持つレコー