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 替换空值的主要内容,如果未能解决你的问题,请参考以下文章