Normaliseer eerst de string, verwijder lege locaties en zorg ervoor dat er een % aan het einde staat:
select replace(concat(user_location,'%'),'%%','%') as str
from YourTable where user_id = 1
Dan kunnen we met een truc het aantal inschrijvingen tellen. Vervang '%' door '%' en tel het aantal spaties dat aan de tekenreeks is toegevoegd. Bijvoorbeeld:
select length(replace(str, '%', '% ')) - length(str)
as LocationCount
from (
select replace(concat(user_location,'%'),'%%','%') as str
from YourTable where user_id = 1
) normalized
Met behulp van substring_index kunnen we kolommen toevoegen voor een aantal locaties:
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
Voor uw voorbeeld US%UK%JAPAN%CANADA
, dit drukt af:
LocationCount Loc1 Loc2 Loc3
4 US UK JAPAN
Dus je ziet dat het kan, maar het ontleden van strings is niet een van de sterke punten van SQL.