Når du prøver at se, hvad Oracle skal gøre, så kig på Oracles dokumentation , "Et juliansk dagtal er antallet af dage siden 1. januar 4712 f.Kr.."
Denne formulering antyder, at Julian 1 ville være en dag siden 1. januar 4712 f.Kr., med andre ord 2. januar. Den nuværende implementering af Julian datoberegning har imidlertid været på plads i lang tid, med eksisterende kode afhængigt af adfærden . (Jeg ved, at vi ville være forkludrede, hvis definitionen af Julian implementeret i Oracle skulle ændre sig.) På dette tidspunkt ville det højst være en dokumentationsfejl at være dage siden 31. december 4713 f.Kr.
REDIGER Fandt en reference for Julian 1 er den 1. januar i Opkaldsgrænsefladeprogrammeringsvejledning . Ikke et sted, normale databaseprogrammører nogensinde ville se på.
Det følgende forklarer årsforskellen mellem wikipedia og Oracle:
Case 3 er en nyhed for mig. Tak fordi du tog det op. Jeg kender ikke nogen reference, der dækker den adfærd. Relateret:
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
og
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
Tilsyneladende er det ikke-eksisterende år 0 et skudår.