如果为NULL,则返回零
我有一块正在打击一些空记录的MySQL,如何将它设置为返回0如果为NULL? 谢谢!如果为NULL,则返回零
尝试这样:
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);
您通常可以换东西,在一个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.
这似乎是您想要的行为。
对不起,我不清楚,我只是想它返回0,如果我得到一个空回。我不是在寻找NULL。感谢您的合作,将用于未来的参考。谢谢。 –
你发布的代码片段是纯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);
谢谢丹尼尔,我现在试试它。它似乎工作正常。 –
糟糕,我的第二个例子(在分配给ipSrc)中出现了一个错误,现在已编辑修复 –
'COUNT(*)'应该返回0如果没有匹配的行。你从哪里得到'NULL'? –
因为我在lsniff.exe的0x57088ce4处得到未处理的异常:0xC0000005:访问冲突读取位置0x00000000。 –