Първо нормализирайте низа, като премахнете празните места и се уверите, че има % в края:
select replace(concat(user_location,'%'),'%%','%') as str
from YourTable where user_id = 1
След това можем да преброим броя на записите с трик. Заменете „%“ с „%“ и пребройте броя интервали, добавени към низа. Например:
select length(replace(str, '%', '% ')) - length(str)
as LocationCount
from (
select replace(concat(user_location,'%'),'%%','%') as str
from YourTable where user_id = 1
) normalized
Използвайки substring_index, можем да добавяме колони за няколко местоположения:
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
За вашия пример US%UK%JAPAN%CANADA
, това отпечатва:
LocationCount Loc1 Loc2 Loc3
4 US UK JAPAN
Така че виждате, че може да се направи, но анализирането на низове не е една от силните страни на SQL.