CodeGym /Kurse /SQL SELF /Datums- und Zeitformatierung: NOW(),

Datums- und Zeitformatierung: NOW(), CURRENT_DATE, DATE_PART()

SQL SELF
Level 5, Lektion 2
Verfügbar

Daten und Zeit sind nicht einfach nur abstrakte Zahlen, sondern der Schlüssel zu einem wertvollen Teil deiner Infos. Im echten Leben stolperst du ständig über Daten: zum Beispiel beim Analysieren von Verkäufen pro Monat, beim Filtern nach dem Geburtsdatum von Mitarbeitenden oder beim Vergleichen von Zeitintervallen. Wenn du weißt, wie du mit Daten jonglierst, kannst du flexiblere Abfragen bauen und richtig coole Analysen machen.

Beispiele, wo das Arbeiten mit Daten mega wichtig ist:

  • Analyse der Verkäufe für einen bestimmten Monat.
  • Zählen, wie viele User sich im letzten Jahr registriert haben.
  • Berichte über Zeitintervalle erstellen (zum Beispiel monatliche Einnahmen).

In PostgreSQL gibt’s jede Menge Funktionen für Daten, und wir schauen uns jetzt nur die praktischsten davon an.

Wichtige Funktionen für Daten und Zeit

Die Funktion NOW() gibt dir das aktuelle Datum und die aktuelle Uhrzeit vom Datenbankserver zurück. Die benutzt du, wenn du wissen willst, wie spät es gerade ist. Beispiel: Du willst die Erstellungszeit eines neuen Eintrags speichern.

Syntax:
SELECT NOW();

Beispiel-Ergebnis:

2023-11-05 15:23:45.123456+00

Beispiel für die Nutzung: Du willst einen Bestell-Eintrag mit aktuellem Datum und Uhrzeit speichern:

INSERT INTO orders (order_id, order_date, total_amount)
VALUES (1, NOW(), 150.00);
Kommentar: Hier NOW() fügt automatisch das aktuelle Datum und die aktuelle Uhrzeit in die Spalte order_date ein.

Wie genau der INSERT-Operator funktioniert, erfährst du in den nächsten Vorlesungen :P

Die Funktion CURRENT_DATE

Wenn du nur das aktuelle Datum ohne Uhrzeit brauchst, nimm CURRENT_DATE. Die gibt dir nur Jahr, Monat und Tag zurück.

Syntax:

SELECT CURRENT_DATE;

Beispiel-Ergebnis:

2023-11-05

Beispiel für die Nutzung: Sagen wir, du willst alle Einträge vom heutigen Tag holen:

SELECT *
FROM orders
WHERE order_date = CURRENT_DATE;
Kommentar: Hier vergleichen wir das Datum aus der Spalte order_date mit dem aktuellen Datum.

Kleiner Spaß am Rande. NOW() ist wie dein Kaffee im Büro: sofort bereit. Und CURRENT_DATE ist wie der Kalender an der Wand: nur das Datum, keine Extras.

Datumsteile extrahieren mit DATE_PART()

Die Funktion DATE_PART() holt dir einen bestimmten Teil eines Datums raus, zum Beispiel Jahr, Monat, Tag, Stunde oder Minute. Das ist praktisch, wenn du zum Beispiel Bestellungen pro Jahr zählen oder den Wochentag bestimmen willst.

Syntax:

DATE_PART('teil', datum)

Beispiel:

SELECT DATE_PART('year', NOW()) AS current_year;

Beispiel-Ergebnis:

current_year
2025

Datumsteile, die du extrahieren kannst:

  • year: Jahr.
  • month: Monat.
  • day: Tag.
  • hour: Stunde.
  • minute: Minute.
  • second: Sekunde.
  • dow: Wochentag (0 = Sonntag).

Beispiel 2: Den Monat aus dem aktuellen Datum holen.

SELECT DATE_PART('month', CURRENT_DATE) AS current_month;

Ergebnis:

current_month
6

Du kannst DATE_PART() auch für komplexere Sachen nutzen. Zum Beispiel:

Du willst nur die User auswählen, die im aktuellen Jahr geboren wurden:

SELECT *
FROM students
WHERE DATE_PART('year', birth_date) = DATE_PART('year', CURRENT_DATE);

Beispiel-Ergebnis:

id first_name last_name birth_date grade
1 Otto Art 2025-03-12 9
2 Anna Pal 2025-07-08 8
3 Piu Wolf 2025-01-22 10
4 Eva Go 2025-09-30 7
5 Dan Sok 2025-06-14 9

Praktische Beispiele

In manchen Beispielen tauchen Operatoren auf, die du noch nicht kennst. Kein Stress, bald wirst du solche Sachen locker meistern. Ich will dir einfach ein paar echte Beispiele aus dem Alltag zeigen. Und dich ein bisschen neugierig machen :)

Beispiel 1: Das Alter eines Users bestimmen

Angenommen, wir haben eine Tabelle users mit dem Geburtsdatum jedes Users. Wir wollen ihr Alter berechnen.

Abfrage:

SELECT user_id, first_name, last_name, 
       DATE_PART('year', CURRENT_DATE) - DATE_PART('year', birth_date) AS age
FROM users;

Wir ziehen einfach das Geburtsjahr vom aktuellen Jahr ab. Das ist schnell, aber nicht ganz exakt.

Beispiel-Ergebnis:

user_id first_name last_name age
101 Alex Lin 25
102 Maria Chi 30
103 Tor Coz 22
104 Nat Ive 27
105 Don Sok 35

Beispiel 2: Nach Zeit filtern

Wenn du alle Bestellungen aus der letzten Stunde holen willst:

SELECT *
FROM orders
WHERE order_date >= NOW() - INTERVAL '1 hour';

Siehst du, wie praktisch INTERVAL (Zeitintervall) ist?

Beispiel 3: Nach Monaten gruppieren

Du willst die Anzahl der Bestellungen pro Monat im aktuellen Jahr zählen:

SELECT DATE_PART('month', order_date) AS order_month, COUNT(*) AS order_count
FROM orders
WHERE DATE_PART('year', order_date) = DATE_PART('year', CURRENT_DATE)
GROUP BY DATE_PART('month', order_date)
ORDER BY order_month;

Die Gruppierung läuft über die Monatsnummer, und das Ergebnis wird danach sortiert.

Beispiel-Ergebnis:

order_month order_count
1 120
2 95
3 134
4 110
5 42

Beispiel 4: Den Wochentag extrahieren

Du willst wissen, an welchem Wochentag die meisten Bestellungen gemacht wurden:

SELECT DATE_PART('dow', order_date) AS day_of_week, COUNT(*) AS order_count
FROM orders
GROUP BY DATE_PART('dow', order_date)
ORDER BY order_count DESC;

Der Befehl DATE_PART('dow') gibt dir den Wochentag jeder Bestellung als Zahl zurück, wobei 0 = Sonntag, 1 = Montag usw. DOW steht für DayOfWeek – also Wochentag.

Beispiel-Ergebnis:

day_of_week order_count
5 210
4 190
3 175
2 160
1 140
6 120
0 95

Achte auf typische Fehler

Mit Daten zu arbeiten kann manchmal Kopfschmerzen machen, weil Fehler passieren. Hier ein paar typische Probleme, auf die du stoßen könntest:

Format von Zeit und Datum: Wenn du NOW() oder eine andere Funktion nutzt, die Datum mit Uhrzeit zurückgibt, check immer das Format. Zum Beispiel: Wenn du order_date mit CURRENT_DATE vergleichst, achte darauf, dass die Uhrzeit ignoriert wird oder explizit angegeben ist.

Datum als String: Oft werden Datenbanken so gebaut, dass Daten als Strings (also Text) gespeichert werden. Wenn du dann Datumsfunktionen wie DATE_PART() benutzt, gibt’s einen Fehler. Stell sicher, dass deine Daten den Typ DATE oder TIMESTAMP haben.

Unterschiedliche Zeitzonen: Wenn dein Server in einer anderen Zeitzone läuft als die Datenquelle, kann das zu Verwirrung führen. Überleg dir, ob du TIMESTAMPTZ (Timestamp mit Zeitzone) nutzen willst.

2
Aufgabe
SQL SELF, Level 5, Lektion 2
Gesperrt
Abrufen des aktuellen Datums und der aktuellen Uhrzeit
Abrufen des aktuellen Datums und der aktuellen Uhrzeit
2
Aufgabe
SQL SELF, Level 5, Lektion 2
Gesperrt
Jahr und Monat aus dem aktuellen Datum extrahieren
Jahr und Monat aus dem aktuellen Datum extrahieren
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION