添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
Ein Schalt­jahr, eine Zeit, in der die Uhren anders ticken, die Ka­len­der­blät­ter eine zu­sätz­li­che Zeile bekommen und die Natur sich an einen be­son­de­ren Rhythmus an­schmiegt. Doch hinter diesem fas­zi­nie­ren­den Phänomen verbirgt sich eine komplexe ma­the­ma­ti­sche Regelung, die unsere digitalen Systeme her­aus­for­dern 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 nor­ma­ler­wei­se 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 un­vor­her­ge­se­he­nen Kom­pli­ka­tio­nen führen, wenn nicht an­ge­mes­sen darauf geachtet wird. So sind zum Beispiel diverse SQL-Interval-Funk­tio­nen für Da­tums­be­rech­nun­gen im Monats- und Jah­res­be­reich nicht schalt­jah­res­si­cher. Addiert oder sub­tra­hiert man mithilfe dieser Funk­tio­nen zum/vom 29. Februar einen Wert, der nicht ein Viel­fa­ches von vier Jahren oder 48 Monaten ist, erhält man einen

ORA-01839: date not valid for month specified

Das betrifft min­des­tens 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 Schalt­jahr nicht zwingend alle vier Jahre statt­fin­den muss? Es gibt eine Ausnahme: Wenn sich eine Jah­res­zahl durch 100 teilen lässt, handelt es sich nicht um ein Schalt­jahr – außer es lässt sich auch durch 400 teilen. Aus diesem Grund war das Jahr 1900 kein Schalt­jahr, das Jahr 2000 hingegen schon. 2100, 2200 und 2300 werden wieder keine Schalt­jah­re sein. 
							

Hier findest du weitere DBA Tipps und Infos aus der Welt von Oracle aus unserem News & Insights Bereich.