SQL: Anzahl der Sekunden, Minuten oder Stunden zwischen zwei Datumsangaben bestimmen

Aus DBWiki
Wechseln zu: Navigation, Suche

Zurück zur Übersicht



Wenn die Datumsdifferenz in Tagen ermittelt ist, kann durch Multiplikation mit entsprechenden Faktoren die Zeitperiode skaliert werden.


Um z. B. die Differenz zwischen dem Einstelldatum von Allard und Wecker in Stunden, Minuten und Sekunden zu erhalten, kann so vorgegangen 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( 'd', allard_ed, wecker_ed) * 24 AS std,
       DateDiff( 'd', allard_ed, wecker_ed) * 24 * 60 AS mnt,
       DateDiff( 'd', allard_ed, wecker_ed) * 24 * 60 * 60 AS sek
FROM   ( SELECT min( IIf( ma_name = 'Wecker', eingestellt ) ) AS wecker_ed,
                min( IIf( ma_name = 'Allard', eingestellt ) ) AS allard_ed
         FROM   mitarbeiter ) AS v

Die Datumsdifferenz kann auch durch einfache Subtraktion ermittelt werden.

SELECT ( wecker_ed - allard_ed) * 24 AS std,
       ( wecker_ed - allard_ed) * 24 * 60 AS mnt,
       ( wecker_ed - allard_ed) * 24 * 60 * 60 AS sek
FROM   ( SELECT min( IIf( ma_name = 'Wecker', eingestellt ) ) AS wecker_ed,
                min( IIf( ma_name = 'Allard', eingestellt ) ) AS allard_ed
         FROM   mitarbeiter ) AS v

Lösung für PostgreSQL

SELECT EXTRACT( EPOCH FROM age( '1981-02-22', '1981-02-20' ) )::INTEGER / 60 / 60 AS std,
       EXTRACT( EPOCH FROM age( '1981-02-22', '1981-02-20' ) )::INTEGER / 60 AS mnt,
       EXTRACT( EPOCH FROM age( '1981-02-22', '1981-02-20' ) )::INTEGER AS sek
SELECT ('1981-02-22'::DATE - '1981-02-20'::DATE) * 24 AS std,
       ('1981-02-22'::DATE - '1981-02-20'::DATE) * 24 * 60 AS mnt,
       ('1981-02-22'::DATE - '1981-02-20'::DATE) * 24 * 60 * 60 AS sek

Das Ergebnis aller Abfragen lautet:

std mnt sek
48 2880 172800



Zurück zur Übersicht