informix 在选择中用 0 替换空值

Posted

技术标签:

【中文标题】informix 在选择中用 0 替换空值【英文标题】:informix replace null value with 0 in select 【发布时间】: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)) 【参考方案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

【讨论】:

以上是关于informix 在选择中用 0 替换空值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用scala在Apache spark中用空字符串(“”)替换空值[重复]

在 spark sql 中用无值替换 Null 值

Informix 到 Oracle:处理获取空值

用空值替换空字符串

Bigquery 用一些 000 替换空结果或空值

如何在 BigQuery 中将多个列的空值替换为 0?