在Oracle数据库中如何获得最大可能的日期?

27

Oracle是否有内置函数可返回可插入日期字段的最大可能日期?


5
为什么?如果你在表格中开始输入虚假的“高日期”数值,它会“混淆”优化器,使其假设你有一个涵盖未来8000年的整个日期值范围。 - Gary Myers
5个回答

37
SELECT  TO_DATE('31.12.9999 23:59:59', 'dd.mm.yyyy hh24:mi:ss')
FROM    dual

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

SELECT  TO_DATE(1, 'J')
FROM    dual

14
我认为对于大多数人的需求而言,TO_DATE('9999', 'yyyy')是一个更短且可接受的替代方案,特别是在使用合并空值进行比较时。 - Alex
2
@Alex:是的,但是提问者要求“最大可能日期”。 - Quassnoi
2
TO_DATE(1, 'J') 对我来说返回的是当年的1月1日吗? - Richard Dingwall
1
@RichardDingwall: 对于其他人,它不起作用。http://www.sqlfiddle.com/#!4/8ce59/2 - Quassnoi
2
在sqlfiddle中,TO_DATE(1,'J')返回了公元前4713年1月1日00:00:00-0800的日期。 - Partha Choudhury
显示剩余5条评论

8

4
“Common Era”是用来替代“基督降世纪”(AD)这个带有宗教色彩的术语,以表达一个更为中立的时间计算方式。 - Thilo
从公元前4712年1月1日到公元9999年12月31日的真实答案是... - Doogle

2

我不知道有没有相应的函数,但根据这篇文章的说法:

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日至公元9999年12月31日。


2
另外一种方式,仅供娱乐:
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; - Lalit Kumar B

0
在儒略日格式(JDDD)中,最大的Oracle日期是2086307365。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接