Najpierw znormalizuj ciąg, usuwając puste lokalizacje i upewniając się, że na końcu jest %:
select replace(concat(user_location,'%'),'%%','%') as str
from YourTable where user_id = 1
Następnie możemy policzyć liczbę wejść za pomocą triku. Zamień „%” na „%” i policz liczbę spacji dodanych do ciągu. Na przykład:
select length(replace(str, '%', '% ')) - length(str)
as LocationCount
from (
select replace(concat(user_location,'%'),'%%','%') as str
from YourTable where user_id = 1
) normalized
Używając substring_index, możemy dodać kolumny dla wielu lokalizacji:
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
Na przykład US%UK%JAPAN%CANADA
, to drukuje:
LocationCount Loc1 Loc2 Loc3
4 US UK JAPAN
Widzisz, że można to zrobić, ale parsowanie ciągów nie jest jedną z mocnych stron SQL.