PostgreSQL Datumsfunktionen: Ein kompletter Überblick mit Praxisbeispielen

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

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