CodeGym /Kurse /SQL SELF /Datentypen für Zeit und Datum: DATE,

Datentypen für Zeit und Datum: DATE, TIME, TIMESTAMP, TIMESTAMPTZ

SQL SELF
Level 31 , Lektion 0
Verfügbar

Wenn du mit Daten arbeitest, kommt fast immer irgendwas mit Zeit ins Spiel. Denk mal an Flugpläne, Bestell-Deadlines oder das Datum, wann sich ein User auf der Website registriert hat. Das alles ist Zeitkram. Und damit das easy läuft, brauchst du die richtigen Tools. In PostgreSQL gibt’s dafür spezielle Datentypen, die fürs Speichern und Bearbeiten von Datum und Zeit echt praktisch sind.

Klar, du könntest ein Datum einfach als String wie "2023-10-12" speichern, aber das ist eher eine Falle als eine Lösung. Strings können keine Daten vergleichen, wissen nicht, was „plus drei Tage“ ist, und haben null Plan von Zeitzonen. Die Zeit-Datentypen dagegen – die checken das alles und noch mehr. Damit läuft’s einfacher, zuverlässiger und schneller.

Typ DATE

Der Typ DATE wird genutzt, um nur das Kalenderdatum zu speichern – ohne eine bestimmte Uhrzeit. Das ist praktisch, wenn du mit Daten als eigenständigen Dingen arbeiten willst, zum Beispiel Geburtsdatum, Jahresanfang und so weiter.

Beispiele:

-- Beispiel für das Erstellen einer Tabelle mit Typ `DATE`
CREATE TABLE events (
    event_name TEXT,
    event_date DATE
);

-- Daten einfügen
INSERT INTO events (event_name, event_date)
VALUES ('PostgreSQL Konferenz', '2023-12-01'),
       ('Geburtstag', '2023-10-12');

-- Abfrage
SELECT * FROM events;

Ergebnis:

event_name event_date
PostgreSQL Konferenz 2023-12-01
Geburtstag 2023-10-12

Typ TIME

Der Typ TIME speichert NUR die Uhrzeit, also Stunden, Minuten und Sekunden. Perfekt für Sachen wie Fahrpläne oder Öffnungszeiten von Shops.

Beispiele:

-- Beispiel für das Erstellen einer Tabelle mit `TIME`
CREATE TABLE schedules (
    schedule_name TEXT,
    start_time TIME,
    end_time TIME
);

-- Daten einfügen
INSERT INTO schedules (schedule_name, start_time, end_time)
VALUES ('Arbeitszeit', '09:00:00', '18:00:00'),
       ('Mittagspause', '13:00:00', '14:00:00');

-- Abfrage
SELECT schedule_name, start_time, end_time FROM schedules;

Ergebnis:

schedule_name start_time end_time
Arbeitszeit 09:00:00 18:00:00
Mittagspause 13:00:00 14:00:00

Typ TIMESTAMP

Der Typ TIMESTAMP kombiniert Kalenderdatum und Uhrzeit in einem Wert. Aber: Er berücksichtigt KEINE Zeitzonen. Das kann verwirrend werden, wenn User aus verschiedenen Zeitzonen auf die Daten zugreifen.

Beispiele:

-- Beispiel für das Erstellen einer Tabelle mit `TIMESTAMP`
CREATE TABLE documents (
    document_id SERIAL PRIMARY KEY,
    created_at TIMESTAMP
);

-- Daten einfügen
INSERT INTO documents (created_at)
VALUES ('2023-10-12 15:30:00'),
       ('2023-12-01 08:45:15');

-- Abfrage
SELECT document_id, created_at FROM documents;

Ergebnis:

document_id created_at
1 2023-10-12 15:30:00
2 2023-12-01 08:45:15

Typ TIMESTAMPTZ

Der Typ TIMESTAMPTZ (das TZ steht für "Zeitzone") ist wie TIMESTAMP, speichert aber zusätzlich die Zeitzonen-Info. Das ist mega wichtig für Apps, die mit internationalen Usern arbeiten.

Beispiele:

-- Beispiel für das Erstellen einer Tabelle mit `TIMESTAMPTZ`
CREATE TABLE meetings (
    meeting_id SERIAL PRIMARY KEY,
    meeting_time TIMESTAMPTZ
);

-- Daten einfügen (PostgreSQL speichert die aktuelle Zeitzone)
INSERT INTO meetings (meeting_time)
VALUES ('2023-10-12 15:30:00+03'),
       ('2023-12-01 08:45:15-05');

-- Abfrage
SELECT meeting_id, meeting_time FROM meetings;

Ergebnis:

meeting_id meeting_time
1 2023-10-12 15:30:00+03:00
2 2023-12-01 08:45:15-05:00

Beachte, dass PostgreSQL die Zeit automatisch in die Server-Zeitzone umwandelt.

Vorteile von spezialisierten Datentypen

Korrekte Daten. Typen wie DATE und TIMESTAMP verhindern, dass du falsche Daten speicherst. Zum Beispiel kannst du kein unmögliches Datum wie "2023-02-30" eintragen.

Easy Handling. Du kannst Daten vergleichen, voneinander abziehen, das aktuelle Datum holen und sogar Werte runden (dazu später mehr).

Performance. Zeit-Datentypen brauchen weniger Speicher und Indexplatz als Strings – das macht Abfragen schneller.

Beispiel: Tabelle mit allen Typen erstellen

Lass uns mal eine etwas komplexere Tabelle für Event-Schedules bauen. Wir nutzen gleich mehrere Typen: DATE, TIME, TIMESTAMP und TIMESTAMPTZ.

CREATE TABLE event_schedule (
    event_id SERIAL PRIMARY KEY,
    event_name TEXT NOT NULL,
    event_date DATE NOT NULL,
    start_time TIME NOT NULL,
    end_time TIME NOT NULL,
    full_start TIMESTAMP NOT NULL,
    full_start_with_zone TIMESTAMPTZ NOT NULL
);

-- Daten einfügen
INSERT INTO event_schedule (
    event_name, event_date, start_time, end_time, full_start, full_start_with_zone
)
VALUES
    ('Morgen-Meetup', '2023-11-10', '10:00:00', '11:30:00', '2023-11-10 10:00:00', '2023-11-10 10:00:00+03'),
    ('Abend-Workshop', '2023-11-11', '18:00:00', '20:00:00', '2023-11-11 18:00:00', '2023-11-11 18:00:00+03');

-- Daten checken
SELECT * FROM event_schedule;

Ergebnis:

event_id event_name event_date start_time end_time full_start fullstartwith_zone
1 Morgen-Meetup 2023-11-10 10:00:00 11:30:00 2023-11-10 10:00:00 2023-11-10 10:00:00+03:00
2 Abend-Workshop 2023-11-11 18:00:00 20:00:00 2023-11-11 18:00:00 2023-11-11 18:00:00+03:00

Das ist ein Beispiel für eine echte Datenbank zur Verwaltung von Schedules. Du siehst, wie die verschiedenen Zeitformate sich je nach Aufgabe ergänzen.

Ich hoffe, du hast jetzt wieder auf dem Schirm, wie du die Typen DATE, TIME, TIMESTAMP und TIMESTAMPTZ in PostgreSQL nutzt. In den nächsten Lectures gehen wir tiefer auf Zeitfunktionen ein und lernen, wie man Zeitdaten mit SQL-Queries extrahiert, formatiert und managt.

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