Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL - Obtenha os primeiros 3 valores separados por vírgula


Você pode usar SUBSTRING_INDEX duas vezes, a segunda com parâmetro -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

Se o parâmetro for negativo, tudo à direita do delimitador final (contando a partir da direita) é retornado. Por exemplo.
  • SUBSTRING_INDEX('aaaaa, bbbbb, ccccc', ',', 2) retornará aaaaa, bbbbb
  • SUBSTRING_INDEX( aaaaa, bbbbb, ',', -1) retornará então bbbbb

Você também pode usar ', ' como delimitador ou TRIM o resultado.

Por favor, veja violino aqui .

Editar

Se você quiser considerar strings que podem ter menos de três valores, você pode usar algo assim:
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

Por favor, veja violino aqui .