SQL: Anzahl der Monate oder Jahre zwischen zwei Datumswerten ermitteln

Aus DBWiki
Wechseln zu: Navigation, Suche

Zurück zur Übersicht



Man sollte bei Jahres- und Monatsintervallen immer bedenken, dass es sich um relative Werte handelt. Verschiedene Funktionen, wie DateDiff(), months_between(), extract() o.ä. erlauben es, Zeitintervalle aus zwei Datumsangaben zu extrahieren.


Es soll z. B. die Dauer der Einstellperioden der Mitarbeiter ermittelt werden.

Lösung für Jet-SQL

Hinweis für Access-Anwender
Um die folgende Abfrage selbst testen zu können, müssen die Tabellen der Übungsdatenbank vorhanden sein.

SELECT DateDiff( 'yyyy', min_ed, max_ed)
     + ( Month( max_ed ) * 100 + Day( max_ed ) < Month( min_ed ) * 100 + Day( min_ed ) ) AS jahre,
       ( DateDiff( 'm', min_ed, max_ed )
     + ( Day(max_ed ) < Day( min_ed ) ) ) Mod 12 AS monate,
       CLng( DateDiff( 'd', min_ed, max_ed )
     - ( jahre + monate / 12) * 365.25) AS tage
FROM   ( SELECT min( eingestellt ) AS min_ed,
                max( eingestellt ) AS max_ed
         FROM   mitarbeiter )  AS v

Bei DateDiff() muss man bei Jahres- und Monatsintervallen gegebenenfalls 1 vom Resultat subtrahieren.

Lösung für PostgreSQL

CREATE VIEW min_max AS (
    SELECT age( MAX( eingestellt ), MIN( eingestellt ) ) AS dauer
    FROM   mitarbeiter );
 
SELECT dauer,
       EXTRACT( YEAR FROM dauer )::INTEGER AS jahre,
       EXTRACT( MONTH FROM dauer )::INTEGER AS monate,
       EXTRACT( DAY FROM dauer )::INTEGER AS tage
FROM   min_max

Die Abfrage steht auch als DBFiddle zur Verfügung.

jahre monate tage
6 4 24



Zurück zur Übersicht