Oracleが何をすることになっているのかを確認するときは、Oracleのドキュメント 、「ユリウス日数は、紀元前4712年1月1日からの日数です。」
その言い回しは、ユリウス1が紀元前4712年1月1日、つまり1月2日から1日であることを意味します。ただし、ユリウス日計算の現在の実装は長い間実施されており、既存のコードは動作に依存しています。 。 (Oracleに実装されているJulianの定義が変更された場合、私たちは困惑するでしょう。)この時点で、紀元前4713年12月31日から数日であるのはせいぜいドキュメントのバグでしょう。
編集 リファレンス が見つかりました Julian 1が1月1日である場合、 Call Interface Programmer's Guide 。通常のデータベースプログラマーが目にすることのない場所です。
以下は、ウィキペディアとオラクルの年の違いを説明しています。
ケース3は私にとってニュースです。育ててくれてありがとう。私はその振る舞いをカバーする参考文献を知りません。関連:
SQL> select to_date('0001-01-01', 'YYYY-MM-DD')
- to_date ('-0001-12-31', 'SYYYY-MM-DD') from dual;
TO_DATE('0001-01-01','YYYY-MM-DD')-TO_DATE('-0001-12-31','SYYYY-MM-DD')
-----------------------------------------------------------------------
367
および
SQL> select months_between(to_date('0001-01-01', 'YYYY-MM-DD')
2 , to_date ('-0001-12-31', 'SYYYY-MM-DD')) from dual;
MONTHS_BETWEEN(TO_DATE('0001-01-01','YYYY-MM-DD'),TO_DATE('-0001-12-31','SYYYY-MM-DD'))
---------------------------------------------------------------------------------------
12.0322581
明らかに、存在しない0年はうるう年です。