You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,说明已经是整点,直接保留截断后的值

可选简化写法

也可以通过数值转换的方式简化代码,效果完全一致:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 18:24:03