【问题标题】:How do you obtain the maximum possible date in Oracle?如何在 Oracle 中获得最大可能日期?
【发布时间】:2010-10-15 19:25:09
【问题描述】:

Oracle 中是否有一个函数可以返回可能插入到日期字段中的最高日期?

【问题讨论】:

  • 为什么?如果您开始将虚拟的“高日期”值放入表中,它可能会“混淆”优化器,它会假定您在接下来的 8 千年中拥有整个日期值范围。

标签: oracle function date max


【解决方案1】:
SELECT  TO_DATE('31.12.9999 23:59:59', 'dd.mm.yyyy hh24:mi:ss')
FROM    dual

请注意,最小日期要简单得多:

SELECT  TO_DATE(1, 'J')
FROM    dual

【讨论】:

  • 我认为对于大多数人来说,TO_DATE('9999', 'yyyy') 会是一个更短且可以接受的替代方案,尤其是在比较中用于合并空值时。
  • @Alex:是的,但是操作要求“最大可能日期”。
  • 我知道。只需添加我的 2 美分,希望对某人有所帮助。
  • TO_DATE(1, 'J') 返回 1 月 1 日,对我来说是当年?
  • TO_DATE(1, 'J') 在 sqlfiddle 中为我返回了 01 4713 年 1 月 00:00:00-0800
【解决方案2】:

我不知道函数但根据this article

Oracle 7::公元前 4712 年 1 月 1 日至公元 4712 年 12 月 31 日。
Oracle 8::公元前 4712 年 1 月 1 日至 9999 年 12 月 31 日公元
Oracle 9: 公元前 4712 年 1 月 1 日至公元 9999 年 12 月 31 日。
PL/SQL: 公元前 4712 年 1 月 1 日至 12 月公元 9999 年 31 月 31 日。

【讨论】:

    【解决方案3】:

    来自 11g 文档:

    Oracle 数据库可以存储儒略时代的日期,范围从公元前 4712 年 1 月 1 日到公元 9999 年 12 月 31 日(普通时代,或“公元”)。

    http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/datatype.htm#i1847

    【讨论】:

    • Common Era...这是对“自白偏见”广告的政治正确术语吗?
    • 问题的真正答案... 4712 年 1 月 1 日至 9999 年 12 月 31 日
    【解决方案4】:

    另一种方式,只是为了好玩:

    SELECT to_date(5373484, 'J') + (1 - 1/24/60/60)
      FROM dual;
    
    SELECT date '9999-12-31' + (1 - 1/24/60/60) 
      FROM dual;
    

    【讨论】:

    • 第一个查询应该是SELECT to_date(5373484, 'J') + (1 - 1/24/60/60) FROM dual;
    【解决方案5】:

    在 Julian 格式 (JDDD) 中,最大 Oracle 日期为 2086307365。

    【讨论】:

      猜你喜欢
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-14
      • 2012-12-05
      • 2015-10-17
      相关资源
      最近更新 更多