Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL-Split-Werte in mehrere Zeilen

Wenn Sie eine Zahlentabelle erstellen können, die Zahlen von 1 bis zu den maximal aufzuteilenden Feldern enthält, könnten Sie eine Lösung wie diese verwenden:

select
  tablename.id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) name
from
  numbers inner join tablename
  on CHAR_LENGTH(tablename.name)
     -CHAR_LENGTH(REPLACE(tablename.name, ',', ''))>=numbers.n-1
order by
  id, n

Siehe fiddle hier .

Wenn Sie keine Tabelle erstellen können, kann dies eine Lösung sein:

select
  tablename.id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) name
from
  (select 1 n union all
   select 2 union all select 3 union all
   select 4 union all select 5) numbers INNER JOIN tablename
  on CHAR_LENGTH(tablename.name)
     -CHAR_LENGTH(REPLACE(tablename.name, ',', ''))>=numbers.n-1
order by
  id, n

ein Beispiel für Fiddle ist hier .