🧚 Hör mal! Beekeeper Studio ist eine schnelle, moderne und quelloffene Datenbank-GUI Download
12. Januar 2024 Von Matthew Rathbone

In der Welt der SQL-Datenbanken ist PostgreSQL für seine Robustheit und seinen großen Funktionsumfang bekannt. Eine dieser Funktionen ist die starke Unterstützung für Datums- und Zeitstempeltypen. In diesem Leitfaden schauen wir uns an, wie du Datumswerte in PostgreSQL formatierst – inklusive Codebeispielen. Dieses Tutorial richtet sich an Softwareentwickler und andere technisch Interessierte, die ihr PostgreSQL-Wissen erweitern möchten.

Datumswerte in PostgreSQL verstehen

Bevor wir uns mit dem Formatieren beschäftigen, ist es wichtig zu verstehen, wie Datumswerte in PostgreSQL dargestellt werden. PostgreSQL verwendet den Datentyp „Date“, um Datumswerte zu speichern. So erstellst du eine Tabelle mit einer DATE-Spalte.

CREATE TABLE orders (
  order_id serial PRIMARY KEY,
  order_date DATE NOT NULL
);

Jetzt fügen wir ein paar Daten in die Tabelle orders ein.

INSERT INTO orders (order_date) VALUES 
('2022-04-01'),
('2022-04-02'),
('2022-04-03');

PostgreSQL ist clever und erkennt ein Datum in einem String, wenn du es im ISO-6801-Format angibst.

Datumswerte in PostgreSQL formatieren: Die Funktion TO_CHAR

Die wichtigste Methode zum Formatieren von Datumswerten in PostgreSQL ist die Funktion TO_CHAR. Mit TO_CHAR kannst du Datums- und Zeittypen in einen String mit einem bestimmten Muster umwandeln. So wird sie verwendet:

TO_CHAR(date, format)

Die vollständige Liste der Formatierungsoptionen findest du in der PostgreSQL-Dokumentation. Hier sind die Formatierungsoptionen mit Stand Januar 2024:

Muster Beschreibung
HH Stunde des Tages (01–12)
HH12 Stunde des Tages (01–12)
HH24 Stunde des Tages (00–23)
MI Minute (00–59)
SS Sekunde (00–59)
MS Millisekunde (000–999)
US Mikrosekunde (000000–999999)
FF1 Zehntelsekunde (0–9)
FF2 Hundertstelsekunde (00–99)
FF3 Millisekunde (000–999)
FF4 Zehntel einer Millisekunde (0000–9999)
FF5 Hundertstel einer Millisekunde (00000–99999)
FF6 Mikrosekunde (000000–999999)
SSSS, SSSSS Sekunden seit Mitternacht (0–86399)
AM, am, PM oder pm Vormittags-/Nachmittagsangabe (ohne Punkte)
A.M., a.m., P.M. oder p.m. Vormittags-/Nachmittagsangabe (mit Punkten)
Y,YYY Jahr (4 oder mehr Ziffern) mit Komma
YYYY Jahr (4 oder mehr Ziffern)
YYY letzte 3 Ziffern des Jahres
YY letzte 2 Ziffern des Jahres
Y letzte Ziffer des Jahres
IYYY Kalenderwochenjahr nach ISO 8601 (4 oder mehr Ziffern)
IYY letzte 3 Ziffern des Kalenderwochenjahres nach ISO 8601
IY letzte 2 Ziffern des Kalenderwochenjahres nach ISO 8601
I letzte Ziffer des Kalenderwochenjahres nach ISO 8601
BC, bc, AD oder ad Epochenangabe (ohne Punkte)
B.C., b.c., A.D. oder a.d. Epochenangabe (mit Punkten)
MONTH vollständiger Monatsname in Großbuchstaben (mit Leerzeichen auf 9 Zeichen aufgefüllt)
Month vollständiger Monatsname mit großem Anfangsbuchstaben (mit Leerzeichen auf 9 Zeichen aufgefüllt)
month vollständiger Monatsname in Kleinbuchstaben (mit Leerzeichen auf 9 Zeichen aufgefüllt)
MON abgekürzter Monatsname in Großbuchstaben (3 Zeichen auf Englisch, lokalisiert unterschiedlich lang)
Mon abgekürzter Monatsname mit großem Anfangsbuchstaben (3 Zeichen auf Englisch, lokalisiert unterschiedlich lang)
mon abgekürzter Monatsname in Kleinbuchstaben (3 Zeichen auf Englisch, lokalisiert unterschiedlich lang)
MM Monatsnummer (01–12)
DAY vollständiger Wochentagsname in Großbuchstaben (mit Leerzeichen auf 9 Zeichen aufgefüllt)
Day vollständiger Wochentagsname mit großem Anfangsbuchstaben (mit Leerzeichen auf 9 Zeichen aufgefüllt)
day vollständiger Wochentagsname in Kleinbuchstaben (mit Leerzeichen auf 9 Zeichen aufgefüllt)
DY abgekürzter Wochentagsname in Großbuchstaben (3 Zeichen auf Englisch, lokalisiert unterschiedlich lang)
Dy abgekürzter Wochentagsname mit großem Anfangsbuchstaben (3 Zeichen auf Englisch, lokalisiert unterschiedlich lang)
dy abgekürzter Wochentagsname in Kleinbuchstaben (3 Zeichen auf Englisch, lokalisiert unterschiedlich lang)
DDD Tag des Jahres (001–366)
IDDD Tag des Kalenderwochenjahres nach ISO 8601 (001–371; Tag 1 des Jahres ist der Montag der ersten ISO-Woche)
DD Tag des Monats (01–31)
D Wochentag, Sonntag (1) bis Samstag (7)
ID Wochentag nach ISO 8601, Montag (1) bis Sonntag (7)
W Woche des Monats (1–5) (die erste Woche beginnt am ersten Tag des Monats)
WW Wochennummer des Jahres (1–53) (die erste Woche beginnt am ersten Tag des Jahres)
IW Wochennummer des Kalenderwochenjahres nach ISO 8601 (01–53; der erste Donnerstag des Jahres liegt in Woche 1)
CC Jahrhundert (2 Ziffern) (das einundzwanzigste Jahrhundert beginnt am 2001-01-01)
J Julianisches Datum (ganze Tage seit dem 24. November 4714 v. Chr. um Mitternacht Ortszeit; siehe Abschnitt B.7)
Q Quartal
RM Monat in römischen Ziffern, Großbuchstaben (I–XII; I=Januar)
rm Monat in römischen Ziffern, Kleinbuchstaben (i–xii; i=Januar)
TZ Zeitzonenabkürzung in Großbuchstaben (nur in to_char unterstützt)
tz Zeitzonenabkürzung in Kleinbuchstaben (nur in to_char unterstützt)
TZH Zeitzonen-Stunden
TZM Zeitzonen-Minuten
OF Zeitzonenversatz zu UTC (nur in to_char unterstützt)

Beispiele zur Datumsformatierung

Wandeln wir unser Datum zunächst in einen einfachen, gut lesbaren String um. So geht’s:

SELECT order_id, TO_CHAR(order_date, 'DD Mon YYYY') as formatted_date
FROM orders;

Die Ausgabe sieht dann so aus:

order_id | formatted_date
———+—————-
1 | 13 Jan 2024
2 | 12 Jan 2024
3 | 11 Jan 2024
4 | 10 Jan 2024
5 | 09 Jan 2024

Wir können auch nur einen Teil des Datums extrahieren:

SELECT order_id, TO_CHAR(order_date, 'Day') as day_of_week
FROM orders;

order_id | day_of_week
———+————-
1 | Friday
2 | Thursday
3 | Wednesday
4 | Tuesday
5 | Monday

Wenn wir wollen, können wir Formate sogar kombinieren:

SELECT order_id, TO_CHAR(order_date, 'Day, DD Mon YYYY') as detailed_date
FROM orders;

order_id | detailed_date
———+————————
1 | Friday, 13 Jan 2024
2 | Thursday, 12 Jan 2024
3 | Wednesday, 11 Jan 2024
4 | Tuesday, 10 Jan 2024
5 | Monday, 09 Jan 2024

Die Funktion EXTRACT

Die Funktion EXTRACT bietet einfachen Zugriff auf alle möglichen Bestandteile eines Datums-/Zeitwerts, etwa Jahr, Monat, Tag usw.

SELECT order_id, EXTRACT(MONTH from order_date) as order_month
FROM orders;

order_id | order_month
———+————
1 | 1
2 | 1
3 | 1
4 | 1
5 | 1

Das sind die Grundlagen der Datumsformatierung in PostgreSQL. Mit diesen Werkzeugen hast du eine solide Basis für den Umgang mit Datumswerten. Wie bei allem in der Programmierung gilt: Übung macht den Meister. Probier die Befehle selbst aus und schau, was dir noch einfällt. Happy Coding!

Du solltest diese Abfragen unbedingt mal in Beekeeper Studio ausführen. :-)

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.

Die Linux-Version von Beekeeper hat 100% des Funktionsumfangs, ohne Abstriche und ohne Kompromisse.

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.“
— Alex K., Datenbankentwickler
★★★★★
„Ich habe viele Datenbank-GUIs ausprobiert, aber Beekeeper findet die perfekte Balance zwischen Funktionsumfang und Einfachheit. Es funktioniert einfach.“
— Sarah M., Full-Stack-Entwicklerin

Bereit, deinen SQL-Workflow zu verbessern?

download Kostenlos herunterladen