CodeGym /Kurse /SQL SELF /Funktionen zum Holen von aktuellem Datum und Uhrzeit:

Funktionen zum Holen von aktuellem Datum und Uhrzeit: NOW(), CURRENT_DATE, CURRENT_TIME

SQL SELF
Level 31 , Lektion 1
Verfügbar

PostgreSQL bringt ein paar eingebaute Funktionen mit, um mit aktuellen Zeitwerten zu arbeiten. Diese Funktionen sind praktisch, wenn du z.B. automatisch das Erstellungsdatum eines Eintrags speichern, Berichte auf Basis des aktuellen Datums bauen oder prüfen willst, ob ein Event in einem bestimmten Zeitraum passiert ist. Lass uns die drei wichtigsten Funktionen anschauen: NOW(), CURRENT_DATE und CURRENT_TIME.

NOW(): aktuelles Datum und Uhrzeit holen

Die Funktion NOW() gibt das aktuelle Datum und die aktuelle Uhrzeit im Format TIMESTAMP WITH TIME ZONE zurück. Das heißt, das Ergebnis enthält die genaue Uhrzeit inklusive Zeitzone des Servers.

Beispiel:

SELECT NOW();
-- Ergebnis: 2025-05-25 14:30:45.761523+03

Beachte, dass das Ergebnis folgendes enthält:

  • das Datum (2025-05-25),
  • die Uhrzeit (14:30:45.761523),
  • die Zeitzone (+03).

Wenn du die Zeitzone nicht brauchst, kannst du das Ergebnis explizit in TIMESTAMP umwandeln:

SELECT NOW()::TIMESTAMP;
-- Ergebnis: 2025-05-25 14:30:45.761523

CURRENT_DATE: aktuelles Datum holen

Die Funktion CURRENT_DATE gibt nur das aktuelle Datum ohne Uhrzeit zurück. Der Rückgabewert ist vom Typ DATE.

Beispiel:

SELECT CURRENT_DATE;
-- Ergebnis: 2025-05-25

Das ist praktisch, wenn du die Uhrzeit nicht brauchst, z.B. beim Berechnen von Alter oder beim Gruppieren von Daten nach Tagen.

CURRENT_TIME: aktuelle Uhrzeit holen

Die Funktion CURRENT_TIME gibt die aktuelle Uhrzeit im Format TIME WITH TIME ZONE zurück. Wenn du die Zeitzone nicht brauchst, kannst du das Ergebnis in TIME umwandeln.

Beispiel:

SELECT CURRENT_TIME;
-- Ergebnis: 14:30:45.761523+03

SELECT CURRENT_TIME::TIME;
-- Ergebnis: 14:30:45.761523

Beispiele für die Nutzung der Funktionen

Schauen wir uns ein paar praktische Beispiele an, wo diese Funktionen nützlich sind.

Automatisches Setzen des Erstellungszeitpunkts eines Eintrags

Wenn wir Einträge in eine Tabelle einfügen, ist es oft praktisch, das Erstellungsdatum und die Uhrzeit automatisch zu speichern. In PostgreSQL geht das, indem du beim Erstellen der Tabelle DEFAULT NOW() angibst.

Beispiel für das Erstellen einer Tabelle:

CREATE TABLE orders (
    id SERIAL PRIMARY KEY,
    customer_name TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT NOW() -- Zeitpunkt der Zeilenerstellung
);

Eintrag hinzufügen:

INSERT INTO orders (customer_name) VALUES ('Otto Lin');

Schauen wir uns den Inhalt der Tabelle an:

SELECT * FROM orders;

Ergebnis:

id customer_name created_at
1 Otto Lin 2024-11-25 14:45:12.154678

Daten nach Datum filtern

Angenommen, wir haben eine Tabelle mit Bestellungen und wollen alle Bestellungen auswählen, die heute erstellt wurden. Wir nutzen die Funktion CURRENT_DATE zum Filtern:

SELECT *
FROM orders
WHERE created_at::DATE = CURRENT_DATE;

Hier nutzen wir die Umwandlung created_at::DATE, um die Uhrzeit wegzulassen und nur das Datum zu vergleichen.

Unterschiede zwischen NOW() und CURRENT_TIMESTAMP

Auf den ersten Blick sieht es so aus, als würden NOW() und CURRENT_TIMESTAMP das Gleiche machen. Und das stimmt auch. Die Funktion NOW() kommt einfach aus einem Standard, CURRENT_TIMESTAMP aus einem anderen.

NOW() — PostgreSQL-Funktion

Die Funktion NOW() ist eine eingebaute PostgreSQL-Funktion, die einen Wert vom Typ TIMESTAMP WITH TIME ZONE (timestamptz) zurückgibt. Das ist die aktuelle Serverzeit zum Start des SQL-Queries.

Beispiel:

SELECT NOW();

CURRENT_TIMESTAMP — SQL-Standard

CURRENT_TIMESTAMP ist ein Ausdruck, der im SQL-Standard definiert ist und in PostgreSQL ebenfalls TIMESTAMP WITH TIME ZONE zurückgibt. Im Grunde implementiert PostgreSQL CURRENT_TIMESTAMP als Aufruf derselben Funktion wie NOW().

Beispiel:

SELECT CURRENT_TIMESTAMP;

Vergleich in der Praxis

SELECT NOW(), CURRENT_TIMESTAMP;

Ergebnis:

now current_timestamp
2025-05-25 14:30:45+03 2025-05-25 14:30:45+03

Beide Werte sind gleich, weil sie am Anfang des Queries berechnet werden.

Verwendung von Zeitfunktionen in Filterbedingungen

Jetzt schreiben wir mal einen Query, der Einträge auswählt, die in den letzten 7 Tagen erstellt wurden. Dafür kannst du NOW() mit Datumsarithmetik nutzen:

SELECT *
FROM orders
WHERE created_at >= NOW() - INTERVAL '7 days';

Genauso, wenn du Bestellungen für den aktuellen Monat holen willst, kannst du die Funktion DATE_TRUNC() nutzen, um den Monatsanfang zu bestimmen:

SELECT *
FROM orders
WHERE created_at >= DATE_TRUNC('month', NOW());

DATE_TRUNC() ist eine coole Funktion, dazu erzähle ich dir in ein paar Vorlesungen mehr :P

Praktische Tipps

  • Nutze NOW() oder CURRENT_TIMESTAMP, wenn du die genaue Uhrzeit mit Zeitzone brauchst.
  • Nimm CURRENT_DATE, wenn für deine Aufgabe nur das Datum reicht (z.B. beim Berechnen von Alter oder beim Analysieren von Events an einem bestimmten Tag).
  • CURRENT_TIME wird meistens genutzt, um die Uhrzeit in Reports oder Interfaces zu zeigen, wo wichtig ist, wie viel Zeit für eine Aufgabe draufging.

In der nächsten Vorlesung fangen wir an, Teile von Datum und Uhrzeit mit den Funktionen EXTRACT() und AGE() rauszuziehen. Damit kannst du z.B. easy das Alter einer Person bestimmen oder Daten nach Tagen, Monaten oder Jahren verarbeiten.

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION