以下のように、一つのカラムの中にカンマ区切りで複数の値が入っていて、例えば二つ目の値だけ取り出したいとき
+-------------+
| data |
+-------------+
| aaa,bbb,ccc |
+-------------+
↓
+--------+
| data_2 |
+--------+
| bbb |
+--------+
こうする
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(data, ",", 2), ",", -1) AS data_2
FROM
my_table_name;
ただし、↑の方法だと、区切り文字(カンマ)がないとそのまま値を返すので、バグの元になる
+-------------+
| data |
+-------------+
| aaa,bbb,ccc |
| xxx |
+-------------+
↓
+--------+
| data_2 |
+--------+
| bbb |
| xxx |
+--------+
区切り文字がない場合はNULLを返すようにするには、こうする
SELECT
IF(LOCATE(",", data) > 0,
SUBSTRING_INDEX(SUBSTRING_INDEX(data, ",", 2), ",", -1),
NULL
) AS data_2
FROM
my_table_name;
+-------------+
| data |
+-------------+
| aaa,bbb,ccc |
| xxx |
+-------------+
↓
+--------+
| data_2 |
+--------+
| bbb |
| NULL |
+--------+
区切り文字があったりなかったりする区切られた中の一つ目を抽出する場合はこんな感じ
SELECT
IF(LOCATE(",", data) > 0,
SUBSTRING_INDEX(SUBSTRING_INDEX(data, ",", 1), ",", -1),
data
) AS data_1
FROM
my_table_name;
+-------------+
| data |
+-------------+
| aaa,bbb,ccc |
| xxx |
+-------------+
↓
+--------+
| data_1 |
+--------+
| aaa |
| xxx |
+--------+
かしこ。