最近的这篇文章让我忙于调查 Oracle 中的 Julian 日期转换,并且我发现了我认为是 Oracle 11.1 中的一个错误。测试用例是:
情况1。
SELECT TO_CHAR(TO_TIMESTAMP('0', 'J'), 'DD MON SYYYY') FROM DUAL
这应该返回此处定义的“01 JAN -4713” ,但会引发错误
ORA-01854: julian date must be between 1 and 5373484
案例 2。
SELECT TO_CHAR(TO_TIMESTAMP('1', 'J'), 'DD MON SYYYY') FROM DUAL
这应该返回“02 JAN -4713”作为上述的扩展(比朱利安零日期晚一天),而是返回“01 JAN -4712”(比一年少一天)。
案例 3。
SELECT TO_CHAR(TO_TIMESTAMP('1721424', 'J'), 'DD MON SYYYY') FROM DUAL
返回“01 JAN 0001”。没关系(就目前而言)。如果我们从上面的日期值中减去 1,我们希望它返回前一天,即 31 DEC -0001(不存在零年);但是,当我们执行以下操作时
SELECT TO_CHAR(TO_TIMESTAMP('1721423', 'J'), 'DD MON SYYYY') FROM DUAL
抛出以下错误:
ORA-01841: (full) year must be between -4713 and +9999, and not be 0
表明 Oracle 已尝试生成零年。
(请注意,尽管在上面的测试用例中使用了 TO_TIMESTAMP,但使用 TO_DATE 时会出现完全相同的问题)。
有谁知道如果
- Oracle 已经记录了这些问题?
- 这些问题在11.2还存在吗?
分享和享受。
根据 Phil 在下面的回答,这些问题仍然出现在 11.2 中。
克苏鲁fhtagn。
10.2.0.4 中的相同错误