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.