【问题标题】:informix replace null value with 0 in selectinformix 在选择中用 0 替换空值
【发布时间】:2013-11-28 03:55:30
【问题描述】:

我想用 0 替换 null 值,如果不是 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";

查询输出为空

我该怎么办??

【问题讨论】:

  • luigi 你的回答结果是 ERROR [42000] [Informix][Informix ODBC Driver][Informix]出现语法错误。
  • 使用 NVL:COUNT(NVL(a.resourceid,0))

标签: c# informix


【解决方案1】:

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

第 1 部分:我想用 0 替换空值

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

例子:

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

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

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

【讨论】:

    【解决方案2】:

    Start 和 finish 两种日期时间数据类型吗?如果它们是 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";
    

    如果 start 和 finish 是日期,那么您始终可以将 extend() 设为相同的 startdatetime 和 enddatetime

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-14
      • 2021-02-24
      • 1970-01-01
      • 2018-12-10
      • 1970-01-01
      • 2021-08-31
      • 2017-08-27
      • 1970-01-01
      相关资源
      最近更新 更多