首先規格化字符串,刪除空的位置,並確保最後有一個%:
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
,這個打印:
所以你看它可以做,但解析字符串不是SQL的優勢之一。
感謝您的查詢。但計數Numberoflocations只返回1時,表中的位置超過一個 – Paulraj 2009-11-04 12:29:38
對,我想我明白你的意思了。我會編輯答案。 – Andomar 2009-11-04 12:39:53