我想要计算逗号分隔列的长度
我用过这些
(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行,它也计算空值。
答案 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