计算列中逗号分隔的值 - sql

时间:2016-02-02 06:53:13

标签: mysql

我想要计算逗号分隔列的长度
我用过这些

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

在我的选择查询中。

演示:

id | mycolumn
1    2,5,8,60
2    4,5,1
3    5,Null,Null
前两行的

查询结果正确。对于1 = 4,2 = 3,但对于第3行,它也计算空值。

2 个答案:

答案 0 :(得分:0)

以下是我认为数据的实际状态为:

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

换句话说,第三条记录中mycolumn的整个值为NULL,可能来自执行涉及NULL值的操作。如果您确实有文本NULL,那么您当前的查询仍应有效。

解决此问题的方法是在处理字符串中的COALESCE(val, "")值时使用NULL

答案 1 :(得分: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