SQL: Addieren und Subtrahieren von Datumsintervallen

Aus DBWiki
Wechseln zu: Navigation, Suche

Zurück zur Übersicht



Das Schlüsselwort INTERVAL und dazugehörige Stringliterale repräsentieren die ISO-Standard-SQL-Syntax, die verlangt, dass Intervallwerte in einfache Anführungszeichen eingeschlossen werden. PostgreSQL und Oracle genügen diesem Standard. MySQL weicht etwas davon ab, indem es ohne Apostrophe auskommt. Nahezu jeder andere SQL-Dialekt hat für diese Aufgabe seine eigene Implementierung.


Wir wollen zu einem Datum jeweils 7 Tage, 7 Monate und 7 Jahre hinzuaddieren und auch die gleichen Intervalle davon subtrahieren.

Umsetzung in Jet-SQL

In Access kann dafür die Funktion DateAdd() verwendet werden.

SELECT #1981-06-09# AS dt,
       DateAdd('d',    -5, dt) AS dt_minus_7tage,
       DateAdd('d',     5, dt) AS dt_plus_7tage,
       DateAdd('m',    -5, dt) AS dt_minus_7monate,
       DateAdd('m',     5, dt) AS dt_plus_7monate,
       DateAdd('yyyy', -5, dt) AS dt_minus_7jahre,
       DateAdd('yyyy',  5, dt) AS dt_plus_7jahre;
dt dt_minus_7tage dt_plus_7tage dt_minus_7monate dt_plus_7monate dt_minus_7jahre dt_plus_7jahre
09.06.1981 02.06.1981 16.06.1981 09.11.1980 09.01.1982 09.06.1974 09.06.1988

Umsetzung in PostgreSQL

WITH w ( dt ) AS ( VALUES ( '1981-06-09'::DATE ) )
SELECT dt,
       (dt - INTERVAL '7 day')::DATE   AS dt_minus_7days,
       (dt + INTERVAL '7 day')::DATE   AS dt_plus_7days,
       (dt - INTERVAL '7 month')::DATE AS dt_minus_7monate,
       (dt + INTERVAL '7 month')::DATE AS dt_plus_7monate,
       (dt - INTERVAL '7 year')::DATE  AS dt_minus_7jahre,
       (dt + INTERVAL '7 year')::DATE  AS dt_plus_7jahre
FROM   w

Das Ergebnis kann in diesem DBFiddle eingesehen werden.



Zurück zur Übersicht