2014-03-14 78 views
0

請建議如何從列中獲取特定字符串而不使用類似查詢。例如 。Mysql包含字符串以獲得列中的特定字符串

表名通知
coulumn1: notificationid
列2: notification_to_id

notificationid  notification_to_id 
    1      25,23 
    2      15,16,25 

如何從notification_to_id列單獨只得到25串

+4

多個值......這就是錯誤的正常化!每列應標準化,只包含一個值! – NoobEditor

+0

@ shalini,你的意思是你想得到最大值? – codelover

+0

不,不是最大值我需要找到特定的字符串@codelover – Thaya

回答

2

試試這個

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' 

sqlFiddle

所以查詢通過使用SUBSTRING_INDEX通過的SELECT 1UNION給予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,)' 

sqlfiddle

如果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,%' 

sqlFiddle

+0

mmmmm ....小心解釋這個'sql'發生了什麼......看起來火箭科學給我! :) – NoobEditor

+0

是的......我是對的......它肯定是火箭科學! :D – NoobEditor

+0

不是這不是它只是解決不太正常的數據 –

相關問題