Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL:ottieni i primi 3 valori separati da virgola

Potresti usare SUBSTRING_INDEX due volte, la seconda con il parametro -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 il parametro è negativo, viene restituito tutto a destra del delimitatore finale (contando da destra). Es.

  • SUBSTRING_INDEX('aaaaa, bbbbb, ccccc', ',', 2) restituirà aaaaa, bbbbb
  • SUBSTRING_INDEX( aaaaa, bbbbb, ',', -1) restituirà quindi bbbbb

Potresti anche voler usare ', ' come delimitatore o TRIM il risultato.

Si prega di vedere violino qui .

Modifica

Se vuoi considerare stringhe che potrebbero avere meno di tre valori, puoi usare qualcosa del genere:

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

Si prega di vedere violino qui .