【问题标题】:how to augment precision of date difference in oracle如何提高oracle中日期差异的精度
【发布时间】:2016-02-22 23:26:23
【问题描述】:

我必须处理这种超精确的日期差异。

在存储过程中:

d1 := abs(q.date - p.date);
-- renders .00001157407407407407407407407407407407407407

d2 := abs(z.date - p.date);                  
-- renders .00001157407407407407407407407407407407407407 (the same value assigned to d1)

但我知道 d1 与 d2 略有不同。类似的东西:

真实 d1:.00001157407407407407407407407407407407407407001

真实 d2:.00001157407407407407407407407407407407407407002

有没有办法增加 oracle 的 d1 和 d2 的数值精度?

谢谢。

【问题讨论】:

    标签: oracle date oracle11g


    【解决方案1】:

    Oracle date 精确到秒。减去两个日期会产生天数差异。 1 天 = 24 小时 = 24*60 (1440) 分钟 = 1440*60 (86400) 秒。因此,两个 date 值之间的最小可能差异是 1/86400 = 1.157 * 10^-5 (0.00001157) 天。两个日期差异不可能小于那个值。

    因此,您的问题似乎不是数字精度之一,而是date 精度之一。您可以将 date 列更改为 timestamp 列,尽管 Oracle 只能从操作系统获得毫秒 (Window) 或微秒 (Unix) 精度,但它可以存储高达纳秒的精度。这将为您存储的时间分量提供更精细的分辨率。

    【讨论】:

    • 所以我猜周期性 407 只是小数点后 8 位的预言机。这种重复从一开始就很可疑......无法更改字段类型,因为我们使用的第三方软件不处理时间戳。在执行减法之前,将尝试将日期转换为时间戳。你会建议别的吗?谢谢
    • @PrefijoSustantivo - 铸造对你没有帮助。如果您进行数学计算,您显示的两个差异都是 1/86400(我没有尝试表示完整的十进制表示,我只是指出这是可能的最小差异)。作为人类,您可能知道两个日期之间存在毫秒数,但应用程序从未捕获到这一点,因此 Oracle 无法报告任何小于一秒的差异。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 2016-03-13
    • 2019-11-17
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    相关资源
    最近更新 更多