Quando provi a vedere cosa dovrebbe fare Oracle, guarda documentazione , "Un numero di giorni giuliano è il numero di giorni trascorsi dal 1 gennaio 4712 aC."
Quella formulazione sembra implicare che Giuliano 1 sarebbe un giorno dal 1 gennaio 4712 a.C., in altre parole il 2 gennaio. Tuttavia l'attuale implementazione del calcolo della data giuliana è in vigore da molto tempo, con il codice esistente a seconda del comportamento . (So che saremmo fregati se la definizione di Julian implementata in Oracle dovesse cambiare.) A questo punto sarebbe al massimo un bug della documentazione essere giorni dal 31 dicembre 4713 aC.
MODIFICA Trovato un riferimento per Julian 1 è il 1 gennaio, in Guida al programmatore dell'interfaccia di chiamata . Non un posto in cui i normali programmatori di database guarderebbero mai.
Quanto segue spiega la differenza di anno tra Wikipedia e Oracle:
Il caso 3 è una novità per me. Grazie per averlo sollevato. Non conosco alcun riferimento che copra quel comportamento. Correlati:
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
e
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
Apparentemente l'anno inesistente 0 è un anno bisestile.