Oracle计算两个日期天数差忽略时分秒的方案咨询
Oracle忽略时分秒的日期天数差实现方案
核心实现逻辑
要忽略时分秒的影响,只需要将两个时间的时分秒统一截断为当日0点后直接相减即可,Oracle中DATE类型相减的结果就是两个日期的整数天数差,完全符合需求。
最终查询语句
SELECT TRUNC(CURRENT_TIMESTAMP) - TRUNC(EVENT_TIMESTAMP) AS DAY_DIFF FROM your_table;
如果需要兼容更严格的类型校验,也可以显式转换为DATE类型后再截断:
SELECT TRUNC(CAST(CURRENT_TIMESTAMP AS DATE)) - TRUNC(CAST(EVENT_TIMESTAMP AS DATE)) AS DAY_DIFF FROM your_table;
效果验证
针对你给出的示例:
- CURRENT_TIMESTAMP为
24-JUN-21 00.01.01 AM,TRUNC后得到24-JUN-21 00:00:00 - EVENT_TIMESTAMP为
23-JUN-21 07.00.00 PM,TRUNC后得到23-JUN-21 00:00:00
两者相减结果为1,完全符合预期。
原有写法问题说明
- 第一种用
EXTRACT(DAY FROM (CURRENT_TIMESTAMP - EVENT_TIMESTAMP))的写法,计算的是两个时间实际间隔的24小时倍数天数,示例中时间差不足24小时,因此返回0,不符合跨天即算1天的需求。 - 第二种用
CEIL(SYSDATE - CAST(EVENT_TIMESTAMP AS DATE))的写法,没有对SYSDATE做时分秒截断,当SYSDATE的时间部分晚于EVENT_TIMESTAMP的时间部分时,差值会大于1,CEIL向上取整后就会得到2,不符合要求。
内容的提问来源于stack exchange,提问作者2787184
相关产品推荐
相关产品推荐

