Je zou SUBSTRING_INDEX kunnen gebruiken tweemaal, de tweede met -1 parameter:
SELECT
'aaaaa, bbbbb, ccccc',
SUBSTRING_INDEX('aaaaa, bbbbb, ccccc', ',', 1) AS column_one,
SUBSTRING_INDEX(SUBSTRING_INDEX('aaaaa, bbbbb, ccccc', ',', 2), ',', -1) AS column_two,
SUBSTRING_INDEX(SUBSTRING_INDEX('aaaaa, bbbbb, ccccc', ',', 3), ',', -1) AS column_three
Als de parameter negatief is, wordt alles rechts van het laatste scheidingsteken (vanaf rechts geteld) geretourneerd. Bijv.
SUBSTRING_INDEX('aaaaa, bbbbb, ccccc', ',', 2)
retourneertaaaaa, bbbbb
SUBSTRING_INDEX(
aaaaaa, bbbbb, ',', -1)
retourneert danbbbbb
U kunt ook ', ' als scheidingsteken gebruiken, of TRIM het resultaat.
Zie fiddle hier .
Bewerken
Als u tekenreeksen wilt overwegen die minder dan drie waarden kunnen hebben, kunt u zoiets als dit gebruiken:
SELECT
s,
SUBSTRING_INDEX(s, ',', 1) AS column_one,
CASE WHEN LENGTH(s)-LENGTH(Replace(s, ',', ''))>0
THEN SUBSTRING_INDEX(SUBSTRING_INDEX(s, ',', 2), ',', -1)
ELSE NULL END AS column_two,
CASE WHEN LENGTH(s)-LENGTH(Replace(s, ',', ''))>1
THEN SUBSTRING_INDEX(SUBSTRING_INDEX(s, ',', 3), ',', -1)
ELSE NULL END AS column_three
FROM
strings
Zie fiddle hier .