我有一块MySQL正在点击一些空记录,如果为NULL,如何将其设置为返回0? 谢谢!
试过这个:
sprintf(queryString, "SELECT COUNT(*) FROM tblURLIP
WHERE IP = '%s' AND IPStatus = '1' AND IPMax = '0'
AND IPType ='3'", ipSrc);
不起作用:
sprintf(queryString, "SELECT COUNT(*) FROM tblURLIP
WHERE IP = '%s' AND IPStatus = '1' AND IPMax = '0'
AND IPType ='3'", ipSrc,NULL),0);
答案 0 :(得分:4)
你通常可以在coalesce
function中包装返回NULL的东西,它会为你提供第一个非空值:
select coalesce (some-nullable-thing, 0 ) from ...
但是,count()
永远不会返回NULL。如果没有满足条款的记录,则应该返回0。
如果你的问题不在于SQL,而在于ipSrc
本身是NULL的事实,这是在用sprintf
处理它之前变形的一个简单问题。要将NULL转换为0并保持其他所有内容不变,您可以使用以下内容:
sprintf (queryString,
"SELECT COUNT(*) FROM tblURLIP"
" WHERE IP = '%s'"
" AND IPStatus = '1'"
" AND IPMax = '0'"
" AND IPType ='3'",
(ipSrc == NULL) ? "0" : ipSrc); // <-- conversion happens here.
这似乎是你想要的行为。
答案 1 :(得分:1)
你发布的代码片段是纯C(它显然为SQL构建了一个查询字符串,但是这里没有SQL,只是构建一个字符串)。
我对你的问题的唯一解释是,有时ipSrc为NULL,有时它指向有效的字符串。
假设情况确实如此,我认为这会做我认为你要问的事情:
sprintf(queryString, "SELECT COUNT(*) FROM tblURLIP
WHERE IP = '%s' AND IPStatus = '1' AND IPMax = '0'
AND IPType ='3'", ipSrc == 0 ? "0" : ipSrc);
关键部分是? :
运算符组合。如果这是太过模糊的C,为了您的舒适,您也可以这样做:
if (ipSrc == 0) // instead of 0 you can use NULL if that better suits your style
ipSrc = "0";
sprintf(queryString, "SELECT COUNT(*) FROM tblURLIP
WHERE IP = '%s' AND IPStatus = '1' AND IPMax = '0'
AND IPType ='3'", ipSrc);