2013-11-28 97 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