【发布时间】:2010-10-15 19:25:09
【问题描述】:
Oracle 中是否有一个函数可以返回可能插入到日期字段中的最高日期?
【问题讨论】:
-
为什么?如果您开始将虚拟的“高日期”值放入表中,它可能会“混淆”优化器,它会假定您在接下来的 8 千年中拥有整个日期值范围。
Oracle 中是否有一个函数可以返回可能插入到日期字段中的最高日期?
【问题讨论】:
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') 会是一个更短且可以接受的替代方案,尤其是在比较中用于合并空值时。
TO_DATE(1, 'J') 返回 1 月 1 日,对我来说是当年?
我不知道函数但根据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 日。
【讨论】:
来自 11g 文档:
Oracle 数据库可以存储儒略时代的日期,范围从公元前 4712 年 1 月 1 日到公元 9999 年 12 月 31 日(普通时代,或“公元”)。
http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/datatype.htm#i1847
【讨论】:
另一种方式,只是为了好玩:
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;
在 Julian 格式 (JDDD) 中,最大 Oracle 日期为 2086307365。
【讨论】: