2016-02-02 83 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