När du försöker se vad Oracle är tänkt att göra, titta på Oracles dokumentation , "Ett julianskt dagnummer är antalet dagar sedan 1 januari 4712 f.Kr.."
Den formuleringen antyder att Julian 1 skulle vara en dag sedan 1 januari 4712 f.Kr., med andra ord 2 januari. Den nuvarande implementeringen av Julian datumberäkning har dock varit på plats under lång tid, med befintlig kod beroende på beteendet . (Jag vet att vi skulle vara skruvade om definitionen av Julian som implementerades i Oracle skulle ändras.) Vid det här laget skulle det som mest vara ett dokumentationsfel att vara dagar sedan 31 december 4713 f.Kr.
REDIGERA Hittade en referens för Julian 1 är 1 januari, i Call Interface Programmer's Guide . Inte någonstans som vanliga databasprogrammerare någonsin skulle titta på.
Följande förklarar årsskillnaden mellan wikipedia och Oracle:
Fall 3 är en nyhet för mig. Tack för att du tog upp det. Jag känner inte till någon referens som täcker det beteendet. Relaterat:
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
och
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
Tydligen är det icke existerande året 0 ett skottår.