[英]Return zero if NULL
我有一塊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);
通常,您可以將coalesce
返回NULL的內容包裝到coalesce
函數中 ,該函數會為您提供第一個非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.
那似乎是您想要的行為。
您發布的代碼段是純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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.