sql >> Databasteknik >  >> RDS >> Mysql

Hur man delar upp en enda rad i flera kolumner i mysql

Normalisera först strängen, ta bort tomma platser och se till att det finns en % i slutet:

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

Sedan kan vi räkna antalet anmälningar med ett trick. Ersätt '%' med '% ' och räkna antalet blanksteg som lagts till i strängen. Till exempel:

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

Med hjälp av substring_index kan vi lägga till kolumner för ett antal platser:

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 ditt exempel US%UK%JAPAN%CANADA , detta skriver ut:

LocationCount  Loc1    Loc2    Loc3
4              US      UK      JAPAN

Så du ser att det kan göras, men att analysera strängar är inte en av SQLs styrkor.



  1. Fel vid installation av mysql2 gem (Windows 8)

  2. Optimera PostgreSQL skrivskyddade tabeller

  3. Funktion för att sanera indatavärden PHP

  4. Skapa två arrayer för två fält, håll sorteringsordningen för arrayer synkroniserade (utan underfråga)