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.