如何在SQL中减去-2日期后避免列中的零值?

时间:2018-12-09 11:12:49

标签: oracle oracle10g oracle-sqldeveloper

我有这个查询:

SELECT CREAD, DATE, NOTIFICATION,
NVL (ROUND ((((:endate - :stdate) * 24) - CASE 
WHEN MAX(CREAD) = MIN(CREAD) THEN MAX(CREAD)
ELSE MAX(CREAD) - MIN(CREAD)
END) / COUNT(NOTIFICATION),2),0) "MTTR"
FROM DUAL;

当用户在开始日期和结束日期之间选择日期时,执行此表:

 CREAD     DATE       NOTIFICATION     MTTR
  123      1/1/2017        6            56
  1000     30/1/2017       3            80

当用户在开始日期和结束日期之间没有选择任何日期时,请执行此表:

  CREAD     DATE       NOTIFICATION     MTTR
  123      1/1/2017        6             0
  1000     30/1/2017       3             0

在“ MTTR”列中的值为0。但是我希望上表中的值为相同。

如何在oracle sql中编写查询?

1 个答案:

答案 0 :(得分:1)

  

当用户在开始日期和结束日期之间未选择任何日期时,则“ MTTR”列值为0。

当用户没有选择日期时,表达式(:endate - :stdate)的第一部分的值为(null - null),因此表达式的其余部分的值为null,因此您的查询返回{{1 }}默认为NVL()

  

但我希望上表中的值相同。

要获得此结果,您需要处理0start_date的空值。也许这对您有用:

end_date

或者您可能需要其他默认设置。但是,由于nvl(:endate -:stdate, 1) 的值取决于MTTRstart_date的范围,因此很难看到当用户输入时如何获得“相同值” 没有界限。