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

So teilen Sie eine einzelne Zeile in mysql in mehrere Spalten auf

Normalisieren Sie zuerst die Zeichenfolge, entfernen Sie leere Stellen und stellen Sie sicher, dass am Ende ein % steht:

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

Dann können wir mit einem Trick die Anzahl der Einträge zählen. Ersetzen Sie '%' durch '% ' und zählen Sie die Anzahl der Leerzeichen, die der Zeichenfolge hinzugefügt wurden. Zum Beispiel:

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

Mit substring_index können wir Spalten für eine Reihe von Orten hinzufügen:

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

Für Ihr Beispiel US%UK%JAPAN%CANADA , das druckt:

LocationCount  Loc1    Loc2    Loc3
4              US      UK      JAPAN

Sie sehen also, es geht, aber das Analysieren von Strings gehört nicht zu den Stärken von SQL.