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

Oracle与EDB(Postgres)日期差计算差异、结果对齐及小数含义问题

Oracle与PostgreSQL日期差差异问题解答

如何在PostgreSQL/EDB中得到与Oracle完全一致的日期差输出结果

Oracle中两个DATE类型做减法时,直接返回数值型的天数差;PostgreSQL(含EDB分支)中两个日期/时间类型做减法默认返回interval类型,即示例中21715 days 05:23:13的格式。
要得到和Oracle逻辑、格式完全一致的带小数数值型天数差,将时间差转换为秒级总时长后除以单日总秒数(86400,即246060)即可,参考语句:

SELECT 
  ROUND(
    EXTRACT(EPOCH FROM (SYSDATE - TO_DATE('23-03-1022','dd-mm-yyyy')))/86400,
    4
  ) AS date_diff;

语法说明:

  • EXTRACT(EPOCH FROM <时间间隔>)会返回间隔对应的总秒数,返回值为浮点数类型
  • 除以86400后得到以天为单位的带小数差值,和Oracle返回值的计算逻辑、数据类型完全对齐
  • 外层ROUND函数用于将结果保留4位小数,和示例中Oracle的输出精度匹配,可根据实际需求调整保留位数

Oracle日期差结果中小数部分.2233的含义

Oracle日期差的返回值单位固定为天:

  • 整数部分代表两个日期之间相差的完整自然日天数
  • 小数部分代表不足1天的时间差换算成天的比例值
    示例中的0.2233即代表0.2233天,按时间单位换算:
  • 小时:0.2233 * 24 ≈ 5.36,即5小时
  • 分钟:0.36 * 60 ≈ 21.6,即21分钟
  • 秒:0.6 * 60 ≈ 36,即约36秒
    也就是说执行该查询时,当前时间距离当日零点约为5小时21分36秒。PostgreSQL返回的05:23:13和该值的细微差异,是两条查询语句执行时刻不完全重合、SYSDATE取到的当前时间有偏差导致的,属于正常现象。

内容的提问来源于stack exchange,提问作者anant

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 07:37:30