ORACLE DATETIME 在分钟 <> 0 时向上舍入

ORACLE DATETIME ROUND UP WHEN MINUTES <> 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 不同时,我需要四舍五入。

示例:

1/1/2000 2:37:00 上午 => 应该是 => 1/1/2000 3:00:00 上午。 (如果小时 =00,不要四舍五入) 1/1/2000 2:00:00 AM => 应该是 => 1/1/2000 2:00:00 AM

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

此致

我会将 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

假设 datetimeutcdate 数据类型的输入值,您可以这样做:

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

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