Ein ‚Interval‘ steht in PostgreSQL für eine Zeitdauer. Es kann das Ergebnis der Subtraktion zweier TIMESTAMP-Werte sein oder explizit mit dem Schlüsselwort INTERVAL definiert werden.
Hier ein Beispiel:
SELECT INTERVAL '2 days 3 hours 40 minutes' AS example_interval;
Erwartete Ausgabe:
example_interval
-------------------
2 days 03:40:00
Tage, Stunden und Minuten extrahieren
Tage extrahieren
So extrahierst du die Gesamtzahl der Tage aus einem Interval:
SELECT EXTRACT(DAY FROM INTERVAL '5 days 4 hours 30 minutes') AS total_days;
Erwartete Ausgabe:
total_days
------------
5
Stunden extrahieren
Beim Extrahieren von Stunden liefert die Funktion EXTRACT nur den Stundenanteil des Intervals, nicht die Gesamtstunden inklusive Tage. Zum Beispiel:
SELECT EXTRACT(HOUR FROM INTERVAL '2 days 4 hours 30 minutes') AS hours_component;
Erwartete Ausgabe:
hours_component
-----------------
4
Um die Gesamtstunden inklusive Tage zu bekommen, musst du etwas rechnen:
SELECT EXTRACT(DAY FROM INTERVAL '2 days 4 hours 30 minutes') * 24 +
EXTRACT(HOUR FROM INTERVAL '2 days 4 hours 30 minutes') AS total_hours;
Erwartete Ausgabe:
total_hours
------------
52
Minuten extrahieren
Wie bei den Stunden liefert das Extrahieren von Minuten nur den Minutenanteil des Intervals:
SELECT EXTRACT(MINUTE FROM INTERVAL '2 days 4 hours 30 minutes') AS minutes_component;
Erwartete Ausgabe:
minutes_component
-------------------
30
Die Gesamtminuten des Intervals kannst du so berechnen:
SELECT (EXTRACT(DAY FROM INTERVAL '2 days 4 hours 30 minutes') * 24 * 60) +
(EXTRACT(HOUR FROM INTERVAL '2 days 4 hours 30 minutes') * 60) +
EXTRACT(MINUTE FROM INTERVAL '2 days 4 hours 30 minutes') AS total_minutes;
Erwartete Ausgabe:
total_minutes
---------------
3150
Praktische Beispiele
Schauen wir uns ein praktisches Beispiel mit einer Tabelle an. Angenommen, wir haben eine Tabelle namens events, die Start- und End-Timestamps für verschiedene Events speichert:
CREATE TABLE events (
event_id SERIAL PRIMARY KEY,
start_time TIMESTAMP,
end_time TIMESTAMP
);
INSERT INTO events (start_time, end_time)
VALUES
('2024-08-01 08:00:00', '2024-08-03 12:30:00'),
('2024-08-05 09:15:00', '2024-08-05 18:45:00');
Wir können für jedes Event das Interval berechnen und die gesamten Tage, Stunden und Minuten extrahieren:
SELECT
event_id,
end_time - start_time AS duration,
EXTRACT(DAY FROM end_time - start_time) AS total_days,
(EXTRACT(DAY FROM end_time - start_time) * 24 +
EXTRACT(HOUR FROM end_time - start_time)) AS total_hours,
(EXTRACT(DAY FROM end_time - start_time) * 24 * 60 +
EXTRACT(HOUR FROM end_time - start_time) * 60 +
EXTRACT(MINUTE FROM end_time - start_time)) AS total_minutes
FROM events;
Erwartete Ausgabe:
event_id | duration | total_days | total_hours | total_minutes
---------+---------------+------------+-------------+--------------
1 | 2 days 04:30 | 2 | 52 | 3150
2 | 09:30:00 | 0 | 9 | 570
Fazit
Tage, Stunden oder Minuten aus einem Interval in PostgreSQL zu extrahieren, ist mit der Funktion EXTRACT ganz einfach. Für Gesamtwerte musst du EXTRACT mit Rechenoperationen kombinieren. Diese Techniken sind sehr nützlich, um zeitbasierte Daten in deinen Anwendungen zu analysieren.
Weitere Artikel, die dir gefallen könnten:
Beekeeper Studio ist eine kostenlose & quelloffene Datenbank-GUI
Das beste SQL-Abfrage- & Editor-Tool, das ich je benutzt habe. Es bietet alles, was ich zum Verwalten meiner Datenbank brauche. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio ist schnell, intuitiv und einfach zu bedienen. Beekeeper unterstützt jede Menge Datenbanken und läuft hervorragend auf Windows, Mac und Linux.
Was Nutzer über Beekeeper Studio sagen
„Beekeeper Studio hat meinen alten SQL-Workflow komplett ersetzt. Es ist schnell, intuitiv und macht die Arbeit mit Datenbanken wieder zum Vergnügen.“
„Ich habe viele Datenbank-GUIs ausprobiert, aber Beekeeper trifft die perfekte Balance zwischen Funktionsumfang und Einfachheit. Es funktioniert einfach.“