MySQLである列の値を取得し、カンマ区切りの値を持つ別の列内での位置を見つけるクエリの書き方
ある列の値が、カンマ区切りの値を格納した別の列の中で何番目に存在するかを調べたい場合には、FIND_IN_SET() 関数を使用します。この記事では、実際にテーブルを作成し、サンプルデータを使って具体的な手順を解説します。
1. テーブルの作成
まず、サンプル用のテーブルを作成します。
mysql> create table DemoTable1866 ( Value1 int, ListOfValues varchar(100) ); Query OK, 0 rows affected (0.00 sec)
ここでは、整数値を格納する Value1 列と、カンマ区切りの複数の値を文字列として保持する ListOfValues 列を定義しています。
2. レコードの挿入
次に、insertコマンドを使ってテーブルにいくつかのレコードを挿入します。
mysql> insert into DemoTable1866 values(56,'78,56,98,95'); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1866 values(103,'103,90,102,104'); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1866 values(77,'34,45,77,78'); Query OK, 1 row affected (0.00 sec)
3. テーブルの内容を確認
select文を実行して、テーブル内のすべてのレコードを表示してみましょう。
mysql> select * from DemoTable1866;
実行すると、次のような結果が得られます。
+--------+----------------+ | Value1 | ListOfValues | +--------+----------------+ | 56 | 78,56,98,95 | | 103 | 103,90,102,104 | | 77 | 34,45,77,78 | +--------+----------------+ 3 rows in set (0.00 sec)
4. FIND_IN_SET()で位置を取得するクエリ
Value1 列の値が ListOfValues 列(カンマ区切り)の中で何番目にあるのかを取得するには、以下のようにクエリを記述します。
mysql> select Value1,ListOfValues,find_in_set(Value1,ListOfValues) as Output from DemoTable1866;
実行結果は以下の通りです。
+--------+----------------+--------+ | Value1 | ListOfValues | Output | +--------+----------------+--------+ | 56 | 78,56,98,95 | 2 | | 103 | 103,90,102,104 | 1 | | 77 | 34,45,77,78 | 3 | +--------+----------------+--------+ 3 rows in set (0.00 sec)
結果の見方
FIND_IN_SET() 関数は、第1引数の値が第2引数のカンマ区切りリスト内で見つかった場合、その位置(1始まり)を返します。上記の例では、56 は 78,56,98,95 の中で2番目にあるため「2」、103 は先頭にあるため「1」、77 は3番目にあるため「3」という結果になっています。もし値がリスト内に存在しない場合は「0」が返される点にも注意してください。
-
MySQLで文字列や数値が混在するカラムから特定のレコードを取得する方法
文字列・数値・特殊文字が混在するカラムから特定のレコードを取得したい場合は、ORDER BY CAST() を活用すると便利です。この記事では、SUBSTRING() 関数と組み合わせて、「指定した文字列で始まるレコードの中から、数値部分が最も大きいもの」を抽出する方法を、実際のSQL例とともにわかりやすく解説します。 サンプルテーブルの作成 まず、CREATE TABLE文でテーブルを作成します。 mysql> create table DemoTable2006 ( UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY, Us
-
【MySQL】カンマ区切りのリストから特定の文字列を検索するには?find_in_set()の使い方を解説
カンマ区切りのデータ検索には正規表現よりfind_in_set()が便利MySQLでカンマ区切りのリスト(CSV形式のカラム)から特定の値を検索したい場合、正規表現を使わなくても、find_in_set() 関数を使うことで簡単に実現できます。find_in_set()は、カンマ区切りの文字列リストの中に指定した値が含まれているかどうかを判定してくれる便利な関数です。基本構文select *from テーブル名 where find_in_set(検索したい値, カラム名);それでは、実際にサンプルテーブルを作成しながら動作を確認していきましょう。サンプルテーブルの作成まずは以下のコマンドでテ