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

Sådan opdeles en enkelt række i flere kolonner i mysql

Normaliser først strengen, fjern tomme placeringer og sørg for, at der er en % i slutningen:

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

Så kan vi tælle antallet af poster med et trick. Erstat '%' med '% ', og tæl antallet af mellemrum tilføjet til strengen. For eksempel:

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

Ved at bruge substring_index kan vi tilføje kolonner for en række placeringer:

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

For dit eksempel US%UK%JAPAN%CANADA , dette udskriver:

LocationCount  Loc1    Loc2    Loc3
4              US      UK      JAPAN

Så du kan se, at det kan lade sig gøre, men at parse strenge er ikke en af ​​SQLs styrker.



  1. MySQL-koncepter:session vs forbindelse

  2. Sådan forbinder du Amazon RDS i iOS

  3. Er der en funktion, der tager et år, måned og dag at oprette en dato i PostgreSQL?

  4. Databasen kan ikke åbnes, fordi den er version 782. Denne server understøtter version 706 og tidligere. En nedgraderingssti understøttes ikke