informix在select中用0替换null值

时间:2013-11-28 03:55:31

标签: c# informix

我想将null值替换为0,如果不为null,我想计算数据??

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";

查询输出为空

我该怎么办?

2 个答案:

答案 0 :(得分:1)

首先,您应该使用简单的数据库表创建简单查询,一些值和请求的结果可以清楚地显示您的问题。

第1部分:我想用0

替换空值

要将NULL更改为某个值,您可以使用NVL()函数。文档说: NVL表达式返回不同的结果,具体取决于它的第一个参数是否计算为NULL。

示例:

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

第2部分:如果不是null我想计算数据

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

答案 1 :(得分:0)

是否启动并完成两个datetime数据类型?如果它们是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";

如果开始和结束是日期,那么你总是可以将extend()设置为相同的startdatetime和enddatetime