0

我有一个日期时间:

select to_date(to_char(r.DATETIMEUTC,'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS') as DATETIME_UTC,
       round(r.DATETIMEUTC, 'hh') as rounded
from   PROD.WX_RAW r;

当分钟与 00 不同时,我需要四舍五入。

例子:

2000 年 1 月 1 日凌晨 2:37:00 => 应该是 => 2000 年 1 月 1 日凌晨 3:00:00。(如果小时 =00,不要四舍五入)2000 年 1 月 1 日凌晨 2:00:00 => 应该是 => 2000 年 1 月 1 日凌晨 2:00:00

现在我的代码有舍入功能,但这个看起来最接近小时,即使分钟是 15,我也需要将小时四舍五入,除非分钟为 00,在这种情况下我需要保留小时。

问候

4

2 回答 2

1

我会将 截断date到小时,然后使用case语句来决定是否添加一个小时。

trunc( r.DATETIMEUTC, 'HH24' ) -- truncate to the hour
+ case when to_number( to_char( r.DATETIMEUTC, 'HH24' ) ) != 0
       then interval '1' hour
       else null
    end
于 2021-08-30T19:49:48.917 回答
1

假设datetimeutcdate数据类型的输入值,您可以执行以下操作:

select trunc(datetimeutc + interval '59' minute, 'hh')
from   .....

数学很简单,但大多数程序员无论如何都不会相信数学;他们会在几个例子中使用这个公式来说服自己它是正确的。所以我不会打扰正式的证明。

于 2021-08-30T21:19:32.973 回答