sql >> Database >  >> RDS >> Oracle

Oracle 11.1 bug die Juliaans dagnummer converteert naar DATE of TIMESTAMP

Als je probeert te zien wat Oracle zou moeten doen, kijk dan eens naar Oracle's documentatie , "Een julians dagnummer is het aantal dagen sinds 1 januari 4712 v.Chr."

Die bewoording lijkt te impliceren dat Julian 1 één dag zou zijn sinds 1 januari 4712 v.Chr. . (Ik weet dat we zouden worden genaaid als de definitie van Julian die in Oracle is geïmplementeerd, zou veranderen.) Op dit moment zou het hoogstens een documentatiefout zijn om dagen sinds 31 december 4713 v.Chr. te zijn.

BEWERKEN Een referentie gevonden voor Julian 1 is 1 januari in Call Interface Programmer's Guide . Niet ergens waar normale databaseprogrammeurs ooit naar zouden kijken.

Het volgende verklaart het jaarverschil tussen wikipedia en Oracle:

Case 3 is nieuws voor mij. Bedankt dat je het naar voren hebt gebracht. Ik ken geen enkele referentie over dat gedrag. Gerelateerd:

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

en

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

Blijkbaar is het niet bestaande jaar 0 een schrikkeljaar.



  1. PostgreSQL IF-instructie

  2. Gegevens gebruiken die zijn beveiligd met een Azure Key Vault van Linux

  3. Mysql - op maat bestellen?

  4. XML Oracle :Extractie van meerdere onderliggende knooppunten