請建議如何從列中獲取特定字符串而不使用類似查詢。例如 。Mysql包含字符串以獲得列中的特定字符串
表名通知
coulumn1: notificationid
列2: notification_to_id
notificationid notification_to_id
1 25,23
2 15,16,25
如何從notification_to_id
列單獨只得到25串
請建議如何從列中獲取特定字符串而不使用類似查詢。例如 。Mysql包含字符串以獲得列中的特定字符串
表名通知
coulumn1: notificationid
列2: notification_to_id
notificationid notification_to_id
1 25,23
2 15,16,25
如何從notification_to_id
列單獨只得到25串
試試這個
SELECT notificationid,
SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(notification_to_id,','),',',value.v),',',-1) as to_id
FROM notification,(SELECT 1 as v UNION
SELECT 2 UNION
SELECT 3 UNION
SELECT 4 UNION
SELECT 5)value
HAVING to_id = '25'
所以查詢通過使用SUBSTRING_INDEX
通過的SELECT 1
的UNION
給予value.v
,這將是在此情況下爲1至最大5的任何地方(選擇在CSV字段中的每個元件... SELECT 5
)。如果它只有csv字段中的3個元素,當value.v
是4或5時,它將返回空字符串''
。 having
將返回以25爲單位的行。
如果notification_to_id
包含超過5個元素,只需添加更多UNION
,如SELECT 6
等等,直到該列中元素的最大數量。
另一種方法是使用REGEX
像下面(但你有25多OCCURENCES更換
SELECT notificationid,
'25' as value
FROM notification
WHERE notification_to_id REGEXP '(^25$)|(^25,)|(,25$)|(,25,)'
如果25是唯一的元素(上面的查詢將匹配^ $ 25 )^標記字符串的開始$標記字符串的結尾或者如果25是第一項(^ 25,)或者如果25是最後一項(25 $)或者如果25在中間的某個位置(,25)
或者如果你想使用LIKE
你使用在單個列下面的
SELECT notificationid,
'25' as value
FROM notification
WHERE notification_to_id LIKE '25'
OR notification_to_id LIKE '25,%'
OR notification_to_id LIKE '%,25'
OR notification_to_id LIKE '%,25,%'
mmmmm ....小心解釋這個'sql'發生了什麼......看起來火箭科學給我! :) – NoobEditor
是的......我是對的......它肯定是火箭科學! :D – NoobEditor
不是這不是它只是解決不太正常的數據 –
多個值......這就是錯誤的正常化!每列應標準化,只包含一個值! – NoobEditor
@ shalini,你的意思是你想得到最大值? – codelover
不,不是最大值我需要找到特定的字符串@codelover – Thaya