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

Come dividere una singola riga in più colonne in MySQL

Per prima cosa normalizza la stringa, rimuovendo le posizioni vuote e assicurandoti che alla fine ci sia una %:

select replace(concat(user_location,'%'),'%%','%') as str
from YourTable where user_id = 1

Quindi possiamo contare il numero di voci con un trucco. Sostituisci '%' con '%' e conta il numero di spazi aggiunti alla stringa. Ad esempio:

select length(replace(str, '%', '% ')) - length(str)
    as LocationCount    
from (
    select replace(concat(user_location,'%'),'%%','%') as str
    from YourTable where user_id = 1
) normalized

Usando substring_index, possiamo aggiungere colonne per un certo numero di posizioni:

select length(replace(str, '%', '% ')) - length(str)
    as LocationCount    
, substring_index(substring_index(str,'%',1),'%',-1) as Loc1
, substring_index(substring_index(str,'%',2),'%',-1) as Loc2
, substring_index(substring_index(str,'%',3),'%',-1) as Loc3
from (
    select replace(concat(user_location,'%'),'%%','%') as str
    from YourTable where user_id = 1
) normalized

Per il tuo esempio US%UK%JAPAN%CANADA , questo stampa:

LocationCount  Loc1    Loc2    Loc3
4              US      UK      JAPAN

Quindi puoi vedere che può essere fatto, ma l'analisi delle stringhe non è uno dei punti di forza di SQL.