sql >> Database >  >> RDS >> Mysql

Een enkele rij splitsen in meerdere kolommen in mysql

Normaliseer eerst de string, verwijder lege locaties en zorg ervoor dat er een % aan het einde staat:

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

Dan kunnen we met een truc het aantal inschrijvingen tellen. Vervang '%' door '%' en tel het aantal spaties dat aan de tekenreeks is toegevoegd. Bijvoorbeeld:

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

Met behulp van substring_index kunnen we kolommen toevoegen voor een aantal locaties:

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

Voor uw voorbeeld US%UK%JAPAN%CANADA , dit drukt af:

LocationCount  Loc1    Loc2    Loc3
4              US      UK      JAPAN

Dus je ziet dat het kan, maar het ontleden van strings is niet een van de sterke punten van SQL.



  1. Een kolom neerzetten met een beperking in SQL Server

  2. Welke gebruiker moet /usr/local/mysql op Mac bezitten?

  3. Hoe CURTIME() werkt in MariaDB

  4. Hoe de primaire sleutel van het laatst bijgewerkte record in MYSQL te krijgen?