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
假设 datetimeutc
是 date
数据类型的输入值,您可以这样做:
select trunc(datetimeutc + interval '59' minute, 'hh')
from .....
数学很简单,但大多数程序员无论如何都不会相信数学;他们会在几个例子中使用这个公式来说服自己它是正确的。所以我不会为正式证明而烦恼。
我有一个日期时间:
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
假设 datetimeutc
是 date
数据类型的输入值,您可以这样做:
select trunc(datetimeutc + interval '59' minute, 'hh')
from .....
数学很简单,但大多数程序员无论如何都不会相信数学;他们会在几个例子中使用这个公式来说服自己它是正确的。所以我不会为正式证明而烦恼。