sql >> Base de Datos >  >> RDS >> Mysql

MySQL:obtenga los primeros 3 valores separados por comas

Podría usar SUBSTRING_INDEX dos veces, la segunda con el 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

Si el parámetro es negativo, se devuelve todo a la derecha del delimitador final (contando desde la derecha). Ej.

  • SUBSTRING_INDEX('aaaaa, bbbbb, ccccc', ',', 2) devolverá aaaaa, bbbbb
  • SUBSTRING_INDEX( aaaaa, bbbbb, ',', -1) luego devolverá bbbbb

También puede usar ', ' como delimitador o RECORTAR el resultado.

Consulte fiddle aquí .

Editar

Si quiere considerar cadenas que pueden tener menos de tres valores, podría usar algo como esto:

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

Consulte fiddle aquí .