sql >> データベース >  >> RDS >> Oracle

ユリウス日番号をDATEまたはTIMESTAMPに変換するOracle11.1のバグ

    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年はうるう年です。



    1. Dockerでmysql_upgradeを実行していますか?

    2. MySQL:トリガーで区切り文字を使用するにはどうすればよいですか?

    3. SQLのSET演算子

    4. DATE列にjava.sql.Timestampを渡すと、Oracleが非常に遅いのはなぜですか?