Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL - Obtenir les 3 premières valeurs séparées par des virgules

Vous pouvez utiliser SUBSTRING_INDEX deux fois, la seconde avec le paramètre -1 :

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

Si le paramètre est négatif, tout ce qui se trouve à droite du délimiteur final (en partant de la droite) est renvoyé. Par exemple.

  • SUBSTRING_INDEX('aaaaa, bbbbb, ccccc', ',', 2) renverra aaaaa, bbbbb
  • SUBSTRING_INDEX( aaaaa, bbbbb, ',', -1) renverra alors bbbbb

Vous pouvez également utiliser ', ' comme délimiteur ou TRIM le résultat.

Veuillez consulter le violon ici .

Modifier

Si vous souhaitez prendre en compte des chaînes pouvant avoir moins de trois valeurs, vous pouvez utiliser quelque chose comme ceci :

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

Veuillez consulter le violon ici .