Datumsarithmetik
Datumswerte können subtrahiert, erhöht oder verringert werden.
Datumsdifferenz : Das Ergebnis der Subtraktion eines Datums ( DATE2 ) von einem anderen ( DATE1 ) ist eine Datumsdauer, die die Anzahl der Jahre, Monate und Tage zwischen den beiden Daten angibt. Der Datentyp des Ergebnisses ist DECIMAL(8,0). Wenn DATE1 größer oder gleich DATE2 ist, wird DATE2 von DATE1 subtrahiert. Wenn DATE1 kleiner als DATE2 ist, wird DATE1 von DATE2 subtrahiert und das Vorzeichen des Ergebnisses wird negativ. Die folgende Verfahrensbeschreibung verdeutlicht die einzelnen Schritte des Vorgangs. ERGEBNIS = DATE1 - DATE2.
| Datumsdifferenz: Ergebnis = date1 - date2 |
|---|
|
Beispielsweise ist das Ergebnis von "DATE('3/15/2005') - '12/31/2004'" 215 (oder eine Dauer von 0 Jahren, 2 Monaten und 15 Tagen). In diesem Beispiel ist zu beachten, dass der zweite Operand nicht in ein Datum umgewandelt werden musste. Gemäß einer der Regeln für die Subtraktion, die unter Datetime arithmetic in SQL beschrieben wird, kann der zweite Operand eine Zeichenfolgendarstellung eines Datums sein, wenn der erste Operand ein Datum ist.
Datumsangaben erhöhen und verringern : Das Ergebnis der Addition einer Dauer zu einem Datum oder der Subtraktion einer Dauer von einem Datum ist selbst ein Datum. (Für die Zwecke dieser Operation entspricht ein Monat einem Kalenderblatt. Monate zu einem Datum hinzuzufügen, ist also wie das Umblättern der Seiten eines Kalenders, beginnend mit der Seite, auf der das Datum steht.) Das Ergebnis muss zwischen dem 1. Januar 0001 und dem 31. Dezember 9999 liegen. Wenn eine Dauer von Jahren addiert oder subtrahiert wird, ist nur der Jahresanteil des Datums betroffen. Der Monat bleibt unverändert, ebenso der Tag, es sei denn, das Ergebnis wäre der 29. Februar eines Nicht-Schaltjahres. Hier wird der Tagesteil des Ergebnisses auf 28 und das Feld SQLWARN6 der SQLCA auf W gesetzt, was darauf hinweist, dass eine Anpassung am Monatsende vorgenommen wurde, um ein ungültiges Datum zu korrigieren. Die Beschreibung der SQLCA-Felder beschreibt auch, wie SQLWARN6 eingestellt ist.
Ebenso sind bei einer Addition oder Subtraktion von Monaten nur Monate und ggf. Jahre betroffen. Der Tagesteil des Datums bleibt unverändert, es sei denn, das Ergebnis wäre ungültig (z. B. 31. September). In diesem Fall wird der Tag auf den letzten Tag des Monats gesetzt und das Feld SQLWARN6 der SQLCA wird auf W gesetzt, um die Anpassung anzuzeigen.
Das Hinzufügen oder Abziehen einer Anzahl von Tagen wirkt sich natürlich auf den Tag des Datums und möglicherweise auf den Monat und das Jahr aus. Das Hinzufügen oder Abziehen einer Anzahl von Tagen führt nicht zu einer Anpassung am Monatsende.
Datumsangaben, ob positiv oder negativ, können auch zu Datumsangaben addiert und von diesen subtrahiert werden. Wie bei den angegebenen Zeiträumen ist das Ergebnis ein gültiges Datum und SQLWARN6 wird auf W gesetzt, um eine erforderliche Anpassung zum Monatsende anzuzeigen.
DATE1 + YEAR(X) YEARS + MONTH(X) MONTHS + DAY(X) DAYS DATE1 - DAY(X) DAYS - MONTH(X) MONTHS - YEAR(X) YEARSWenn man zu einem Datum einen Monat hinzufügt, erhält man denselben Tag einen Monat später, es sei denn, dieser Tag existiert im späteren Monat nicht. In diesem Fall wird der Tag im Ergebnis auf den letzten Tag des späteren Monats festgelegt. Zum Beispiel ergibt der 28. Januar plus einen Monat den 28. Februar; ein Monat, der zum 29., 30. oder 31. Januar hinzugefügt wird, ergibt entweder den 28. Februar oder, in einem Schaltjahr, den 29. Februar. Wenn ein oder mehrere Monate zu einem bestimmten Datum hinzugefügt und dann die gleiche Anzahl von Monaten vom Ergebnis abgezogen wird, ist das endgültige Datum nicht unbedingt dasselbe wie das ursprüngliche Datum.
(DATE('2005 01 31') + 1 MONTH) + 1 MONTH -- results in 2005-03-28
DATE('2005 01 31') + 2 MONTHS -- results in 2005-03-31 DATE1 + 1 YEAR + 1 DAY DATE1 - 1 DAY - 1 MONTH - 1 YEAR