首页 文章

在sql中减去2个日期之后如何避免列中的零值?

提问于
浏览
0

我有这个问题:

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;

当用户在start_date和end_date之间选择日期时,请执行此表:

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

当用户在start_date和end_date之间选择没有日期时,请执行此表:

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

IN“MTTR”列值为0.但我希望上表中的值相同 .

如何在oracle sql中编写查询?

1 回答

  • 1

    当用户在start_date和end_date之间选择没有日期时,则...“MTTR”列值为0 .

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

    但我想在上表中使用相同的值 .

    要获得此结果,您需要处理 start_dateend_date 的空值 . 也许这对你有用:

    nvl(:endate -:stdate, 1)
    

    或者你可能想要一些其他默认值 . 但由于 MTTR 的值取决于 start_dateend_date 的范围,因此很难看到当用户输入无边界时如何获得"the same value" .

相关问题