Ein Schaltjahr, eine Zeit, in der die Uhren anders ticken, die Kalenderblätter eine zusätzliche Zeile bekommen und die Natur sich an einen besonderen Rhythmus anschmiegt. Doch hinter diesem faszinierenden Phänomen verbirgt sich eine komplexe mathematische Regelung, die unsere digitalen Systeme herausfordern kann.
Der ORA-01839 Fehler, benannt nach seinem Code in der Oracle-Datenbank, tritt auf, wenn ein Datum außerhalb des gültigen Bereichs liegt, der normalerweise zwischen dem 1. Januar 4712 v. Chr. und dem 31. Dezember 9999 n. Chr. liegt. Der 29. Februar, als seltener Gast im Kalender, kann zu unvorhergesehenen Komplikationen führen, wenn nicht angemessen darauf geachtet wird. So sind zum Beispiel diverse SQL-Interval-Funktionen für Datumsberechnungen im Monats- und Jahresbereich nicht schaltjahressicher. Addiert oder subtrahiert man mithilfe dieser Funktionen zum/vom 29. Februar einen Wert, der nicht ein Vielfaches von vier Jahren oder 48 Monaten ist, erhält man einen
ORA-01839: date not valid for month specified
Das betrifft mindestens folgende SQL-Funktionen:
-
NUMTOYMINTERVAL
-
TO_YMINTERVAL
-
INTERVAL
SQL> select to_date('29-FEB-24')+numtoyminterval(1,'year') from dual;
select to_date('29-FEB-24')+numtoyminterval(1,'year') from dual
ERROR at line 1:
ORA-01839: date not valid for month specified
SQL> select to_date('29-FEB-24')+to_yminterval('1-0') from dual;
select to_date('29-FEB-24')+to_yminterval('1-0') from dual
ERROR at line 1:
ORA-01839: date not valid for month specified
SQL> select to_date('29-FEB-24')+interval '1' year from dual;
select to_date('29-FEB-24')+interval '1' year from dual
ERROR at line 1:
ORA-01839: date not valid for month specified
Wusstest du, dass das Schaltjahr nicht zwingend alle vier Jahre stattfinden muss? Es gibt eine Ausnahme: Wenn sich eine Jahreszahl durch 100 teilen lässt, handelt es sich nicht um ein Schaltjahr – außer es lässt sich auch durch 400 teilen. Aus diesem Grund war das Jahr 1900 kein Schaltjahr, das Jahr 2000 hingegen schon. 2100, 2200 und 2300 werden wieder keine Schaltjahre sein.
Hier findest du weitere DBA Tipps und Infos aus der Welt von Oracle aus unserem News & Insights Bereich.