簡體   English   中英

如果為NULL,則返回零

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM