2016-02-02 84 views
0

我想算一個逗號的長度分離柱
我有我的選擇查詢使用這些計數逗號分隔值 - SQL

(LENGTH(Col2) - LENGTH(REPLACE(Col2,",","")) + 1) 

演示:對於前兩個行

id | mycolumn 
1 2,5,8,60 
2 4,5,1 
3 5,Null,Null 

查詢結果即將correctly.for 1 = 4,2 = 3,但是對於第三行它也計算空值。

+0

'mycolumn'的類型是什麼? –

+0

列類型:varchar –

+0

我的猜測是你的實際第三條記錄是NULL,而不是你列出的。你能通過查詢來驗證嗎? –

回答

0

這裏是什麼,我相信你的數據的實際狀況是:

id | mycolumn 
1 2,5,8,60 
2 4,5,1 
3 NULL 

換句話說,爲mycolumn在你的第三個記錄的整個價值是NULL,從做涉及NULL值的操作可能。如果您確實有文字NULL,您當前的查詢仍然可以正常工作。

解決此問題的方法是在處理字符串中的NULL值時使用。

+0

用戶也只能選擇一個值 –

+0

您是否真的看過我的回答? –

+0

總共有6個選項可供選擇。用戶可以根據自己的技能選擇選項。它可以只有一個或所有選項。因此,這些值將以gettting存儲爲5,null,null –

0

做粗的辦法是先更換的「 NULL」什麼也沒有匹配的字符串 -

SELECT a.id, (LENGTH(REPLACE(mycolumn, ',Null', '')) - LENGTH(REPLACE(REPLACE(mycolumn, ',Null', ''),",","")) + 1) 
FROM some_table a 

如果值是指行的ID在另一個表,那麼你可以加入對這個表使用FIND_IN_SET然後對匹配進行計數(假設字符串'Null'不是該另一個表上的ID)

SELECT a.id, COUNT(b.id) 
FROM some_table a 
INNER JOIN id_list_table b 
ON FIND_IN_SET(b.id, a.mycolumn) 
GROUP BY a.id