Im Umgang mit Zeit- und Datumsinformationen gehören Datumsfunktionen in PostgreSQL zu den wichtigsten Werkzeugen. Ob du Filter nach Jahr oder Monat setzen willst, Berechnungen mit Zeiträumen durchführen musst oder Datumswerte formatieren willst — mit diesen Funktionen wirst du schnell produktiv.
Warum Datumsfunktionen so essenziell sind
- Datenanalysen basieren oft auf Zeiträumen (z. B. Umsatz pro Monat, Quartal, Jahr)
- Viele Reports benötigen Laufzeiten (z. B. wie viele Tage zwischen A und B)
- Zeitbasierte Filter (z. B. letzte 30 Tage) erfordern flexible Datumsoperationen
Ohne solides Verständnis der Datumsfunktionen in PostgreSQL wird es schnell knifflig.
Wichtige PostgreSQL-Datumsfunktionen und wie du sie nutzt
CURRENT_DATE, CURRENT_TIMESTAMP
Diese liefern das aktuelle Datum oder den aktuellen Zeitstempel:
SELECT CURRENT_DATE; -- z. B. 2025-10-08
SELECT CURRENT_TIMESTAMP; -- z. B. 2025-10-08 14:23:45.123
EXTRACT / DATE_PART
Um bestimmte Komponenten aus einem Datum zu extrahieren:
SELECT EXTRACT(YEAR FROM created_at) AS Jahr,
EXTRACT(MONTH FROM created_at) AS Monat,
EXTRACT(DAY FROM created_at) AS Tag
FROM bestellungen;
DATE_PART()
ist funktional ähnlich:
SELECT DATE_PART('hour', created_at) AS Stunde
FROM bestellungen;
AGE
Berechnet den Zeitabstand zwischen zwei Daten:
SELECT AGE('2025-10-08', '2023-05-01') AS Dauer;
Das Resultat ist ein Interval (z. B. „2 Jahre 5 Monate 7 Tage“).
INTERVAL / + / –
Du kannst Zeiträume addieren oder subtrahieren:
SELECT CURRENT_DATE + INTERVAL '1 month';
SELECT CURRENT_TIMESTAMP - INTERVAL '7 days';
TO_CHAR
Formatiert Datum oder Zeit in Strings nach deinem Wunsch:
SELECT TO_CHAR(created_at, 'YYYY-MM-DD HH24:MI') AS formatierter_zeitpunkt
FROM bestellungen;
DATE_TRUNC
Trunkiert einen Zeitstempel auf Jahr, Monat, Woche, etc.:
SELECT DATE_TRUNC('month', created_at) AS ersterTagImMonat
FROM bestellungen;
Das ist oft hilfreich, um z. B. Monats- oder Quartalswerte zu aggregieren.
Praxisbeispiel: Umsatz nach Monat im laufenden Jahr
SELECT
DATE_TRUNC('month', verkaufsdatum) AS monat,
SUM(umsatz) AS gesamtumsatz
FROM verkauf
WHERE verkaufsdatum >= DATE_TRUNC('year', CURRENT_DATE)
GROUP BY monat
ORDER BY monat;
Hierdurch erhältst du echten monatlichen Trend für das aktuelle Jahr.
Performance-Hinweise & Tipps
- Vermeide Funktionen direkt in der WHERE-Klausel (z. B.
WHERE EXTRACT(MONTH FROM date) = 10
), wenn möglich – solche Filter brechen oft Indexnutzung. Besser:WHERE date BETWEEN '2025-10-01' AND '2025-10-31'
. - Nutze
DATE_TRUNC
+ Vergleich, um Indizes effizient zu nutzen. - Caching: Wenn du viele ähnliche Abfragen mit denselben Datumsbereichen machst, lohnt sich ein Materialized View oder vorberechnete Datumsdimensionstabelle.
Interne Verlinkung & weiterführende Themen
- 🔗 Schau dir auch meinen Artikel zu SQL-Unterabfragen an, das ergänzt deine Abfragen mit Zeitbezug perfekt.
- 🔗 Interessierst du dich für Datenmodellierung? Dann könnte Dimensionstabellen & Zeitdimension ein Thema für dich sein.
Fazit
PostgreSQL bietet ein mächtiges Set an Datumsfunktionen, mit denen du fast jede zeitbasierte Analyse umsetzen kannst. Von Extraktion über Formatierung bis zu Intervallen und Trunkierung – mit diesen Werkzeugen wird deine SQL-Arbeit deutlich flexibler und wartbarer.
Wenn du tiefer in Datumslogik oder Zeitreihenanalysen einsteigen möchtest – schau unbedingt auf meinem YouTube-Kanal vorbei:
https://www.youtube.com/@datenanalyst