Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment diviser une seule ligne en plusieurs colonnes dans mysql

Normalisez d'abord la chaîne, en supprimant les emplacements vides et en vous assurant qu'il y a un % à la fin :

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

Ensuite, nous pouvons compter le nombre d'entrées avec une astuce. Remplacez '%' par '% ' et comptez le nombre d'espaces ajoutés à la chaîne. Par exemple :

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

En utilisant substring_index, nous pouvons ajouter des colonnes pour un certain nombre d'emplacements :

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

Pour votre exemple US%UK%JAPAN%CANADA , cela affiche :

LocationCount  Loc1    Loc2    Loc3
4              US      UK      JAPAN

Vous voyez donc que cela peut être fait, mais l'analyse des chaînes n'est pas l'une des forces de SQL.