Próbując zobaczyć, co ma zrobić Oracle, spójrz na dokumentacja , „Liczba dni juliańskich to liczba dni od 1 stycznia 4712 r. p.n.e.”
To sformułowanie wydaje się sugerować, że Julian 1 będzie jednym dniem od 1 stycznia 4712 pne, innymi słowy 2 stycznia. Jednak obecna implementacja obliczania daty juliańskiej istnieje od dłuższego czasu, z istniejącym kodem zależnym od zachowania . (Wiem, że bylibyśmy spieprzeni, gdyby definicja Juliana zaimplementowana w Oracle miała się zmienić.) W tym momencie byłby to co najwyżej błąd dokumentacji, który miał miejsce od 31 grudnia 4713 r. p.n.e.
EDYTUJ Znaleziono odniesienie dla Juliana 1 jest to 1 stycznia, w Przewodniku programisty interfejsu wywołań . W żadnym miejscu normalni programiści baz danych nigdy by nie spojrzeli.
Poniżej wyjaśniono różnicę lat między Wikipedią a Oracle:
Przypadek 3 to dla mnie nowość. Dziękuję, że to poruszyłaś. Nie znam żadnego odniesienia obejmującego takie zachowanie. Powiązane:
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
i
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
Najwyraźniej nieistniejący rok 0 jest rokiem przestępnym.