この最近の投稿により、私は Oracle でのユリウス日変換の調査に忙殺され、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" を返す必要があります (ユリウス日より 1 日後) が、代わりに "01 JAN -4712" (1 年未満の日ずれ) を返します。
ケース 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
オラクルがゼロの年を生成しようとしたことを示しています。
(上記のテストケースでは TO_TIMESTAMP が使用されていますが、TO_DATE を使用するとまったく同じ問題が発生することに注意してください)。
誰でも知っていますか
- これらの問題は Oracle によって文書化されていますか?
- これらの問題は 11.2 でもまだ存在しますか?
共有してお楽しみください。
以下の Phil の回答によると、これらの問題は 11.2 でも発生します。
クトゥルフのフタグン。
10.2.0.4 の同じバグ