Oracle DATETIME字段非零分钟向上取整到小时实现咨询
Oracle 时间按小时向上取整实现方案
你需要的是对时间按小时做向上取整(天花板取整),Oracle 原生的ROUND是四舍五入逻辑,不符合要求,直接通过截断加条件判断即可实现需求,改造后的SQL如下:
select to_date(to_char(r.DATETIMEUTC,'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS') as DATETIME_UTC, TRUNC(r.DATETIMEUTC, 'HH') + CASE WHEN EXTRACT(MINUTE FROM r.DATETIMEUTC) + EXTRACT(SECOND FROM r.DATETIMEUTC) > 0 THEN 1/24 ELSE 0 END as rounded from PROD.WX_RAW r;
实现逻辑说明
- 先通过
TRUNC(r.DATETIMEUTC, 'HH')把时间截断到当前小时的整点 - 判断当前时间的分钟+秒的总和是否大于0:
- 如果大于0,说明不是整点,加
1/24(Oracle中1天的单位是1,1小时对应1/24)即可得到下一个整点 - 如果等于0,说明已经是整点,直接保留截断后的值
- 如果大于0,说明不是整点,加
可选简化写法
也可以通过数值转换的方式简化代码,效果完全一致:
select to_date(to_char(r.DATETIMEUTC,'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS') as DATETIME_UTC, TRUNC(r.DATETIMEUTC) + CEIL((r.DATETIMEUTC - TRUNC(r.DATETIMEUTC)) * 24)/24 as rounded from PROD.WX_RAW r;
效果验证
- 输入
2000-01-01 02:37:00,输出2000-01-01 03:00:00 - 输入
2000-01-01 02:00:00,输出2000-01-01 02:00:00
内容的提问来源于stack exchange,提问作者Webb
相关产品推荐
相关产品推荐

