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.