2013-11-28 159 views
0

我想用0替換空值,如果不是空我想要數據?informix替換空值0選擇

sql = "SELECT b.start,COUNT(a.resourceid) " + 
     "FROM t1 b,agentconnectiondetail a "+ 
     "WHERE TO_CHAR(a.startdatetime,'%R') >= TO_CHAR(b.start,'%R') AND TO_CHAR(a.enddatetime,'%R') <= TO_CHAR(b.finish,'%R') " + 
     "AND a.resourceid = '"+dr[1].ToString()+"'" + 
     "GROUP BY 1 ORDER BY 1"; 

該查詢輸出爲null

我必須做?

+0

路易吉你的回答結果是 錯誤[ 42000] [Informix] [Informix ODBC Driver] [Informix]發生語法錯誤。 –

+0

使用NVL:'COUNT(NVL(a.resourceid,0))' – ceinmart

回答

1

首先,您應該使用簡單的數據庫表,一些值和要求的結果清楚地顯示您的問題,創建簡單的查詢。

1部分:我想和0

替換空值更改爲NULL一些價值你可以使用NVL()功能。文檔說:NVL表達式返回不同的結果,具體取決於它的第一個參數是否爲NULL。

例子:

SELECT fld, NVL(fld, 0) FROM ... 

第2部分:如果沒有空我要算數據

SELECT COUNT(*) FROM ... WHERE fld IS NOT NULL 
0

正在開始和結束兩個日期時間數據類型?如果他們是DATE,那麼%R(HH:MM)可能沒有意義。

如果它們是日期時間,那麼爲什麼不

SELECT b.start,COUNT(a.resourceid) " + 
    "FROM t1 b,agentconnectiondetail a "+ 
    "WHERE startdatetime >= b.start AND a.enddatetime <= b.finish" + 
    "AND a.resourceid = '"+dr[1].ToString()+"'" + 
    "GROUP BY 1 ORDER BY 1"; 

如果起點和終點的日期,那麼你可以隨時擴展()是相同的startDateTime和enddatetime