MySQLでカンマ区切りリストから最初の要素を抽出する方法
MySQLでカンマ区切りの文字列(CSV形式のデータ)から最初の要素だけを取り出したい場合、SUBSTRING_INDEX() 関数を使うのが最も簡単です。この記事では、実際にテーブルを作成し、サンプルデータを挿入して、最初の要素を抽出する手順を解説します。
1. サンプルテーブルの作成
まずは、カンマ区切りの値を格納するためのテーブルを作成しましょう。
mysql> create table DemoTable
(
CSV_Value varchar(200)
);
Query OK, 0 rows affected (0.81 sec)2. サンプルデータの挿入
次に、INSERT文を使ってカンマ区切りの整数リスト形式でレコードを挿入します。
mysql> insert into DemoTable values('10,20,50,80');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('100,21,51,43');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('1,56,103,1090');
Query OK, 1 row affected (0.26 sec)3. テーブル内のレコードを確認
SELECT文でテーブルの中身を確認してみましょう。
mysql> select *from DemoTable;
実行すると、以下のような結果が表示されます。
+---------------+ | CSV_Value | +---------------+ | 10,20,50,80 | | 100,21,51,43 | | 1,56,103,1090 | +---------------+ 3 rows in set (0.00 sec)
4. SUBSTRING_INDEX()で最初の要素を抽出
ここからが本題です。SUBSTRING_INDEX() 関数を使えば、カンマ区切りリストの最初の要素を簡単に取り出せます。第1引数に対象の文字列、第2引数に区切り文字(今回はカンマ)、第3引数に「1」を指定することで、先頭から1番目までの部分文字列を取得できます。
mysql> select SUBSTRING_INDEX(CSV_Value,',',1) AS FIRST_ELEMENT from DemoTable;
実行結果は以下の通りです。各行のリストから最初の要素だけが表示されているのがわかります。
+---------------+ | FIRST_ELEMENT | +---------------+ | 10 | | 100 | | 1 | +---------------+ 3 rows in set (0.03 sec)
補足:SUBSTRING_INDEX()の応用
SUBSTRING_INDEX() の第3引数に「-1」を指定すれば、逆に最後の要素を取得することもできます。
mysql> select SUBSTRING_INDEX(CSV_Value,',',-1) AS LAST_ELEMENT from DemoTable;
また、第3引数に「2」や「3」といった正の数を指定すると、先頭からその個数分の要素を含む文字列が返されます。これを組み合わせることで、任意の位置にある要素を柔軟に取り出すことも可能です。
なお、正規化されたデータベース設計では、複数の値を1つのカラムにカンマ区切りで保存するのは避けるべきとされています。しかし、既存システムのデータを一時的に解析したり、レポート用に加工したりする場面では、SUBSTRING_INDEX() は非常に便利な関数です。
-
MySQLのSELECTで最初のN件のレコードをスキップする方法(OFFSETの使い方)
MySQLのSELECT文で先頭のレコードをスキップしたい場合は、OFFSETを使用します。OFFSETを指定すると、クエリ結果の最初の指定件数を飛ばして、それ以降のレコードだけを取得できます。この記事では、実際にテーブルを作成しながら、OFFSETの基本的な使い方を解説します。1. サンプルテーブルの作成まず、テーブルを作成します。mysql> create table DemoTable ( Name varchar(40) ); Query OK, 0 rows affected (0.63 sec)「Name」というカラムを1つだけ持つシンプルなテーブル「DemoTabl
-
MySQLでSELECTクエリを使用してデータを挿入(INSERT)する方法
MySQLでは、INSERT文とSELECTクエリを組み合わせることで、テーブルにデータを挿入することができます。通常、SELECTは既存のテーブルからデータを取得するために使われますが、値を直接指定してINSERTを実行する際にも活用できる便利な手法です。基本構文SELECTクエリを使用してINSERTを実行する場合の構文は以下の通りです。insert into yourTableName(yourColumnName1,yourColumnName2,yourColumnName3,...N) select yourValue1,yourValue2,yourValue3,......N;