CodeGym /Kurse /SQL SELF /Arbeiten mit Zeitintervallen: INTERVAL

Arbeiten mit Zeitintervallen: INTERVAL

SQL SELF
Level 31 , Lektion 4
Verfügbar

Arbeiten mit Zeitintervallen: INTERVAL

Das Training dauert anderthalb Stunden, ein Arbeitstag — 8 Stunden, die Pause — 20 Minuten und Eier kochen braucht 10 Minuten. All das sind Zeitintervalle.

Zeitintervalle sind in echten Anwendungen super praktisch, zum Beispiel wenn du Deadlines berechnen, die Differenz zwischen zwei Daten rausfinden oder Zeit addieren/abziehen willst. Aber bevor wir tiefer einsteigen, lass uns kurz wiederholen, wo wir in den letzten Vorlesungen aufgehört haben.

In PostgreSQL ist INTERVAL ein spezieller Datentyp, der für Zeitspannen gedacht ist. Im Gegensatz zu anderen Zeittypen speichert er kein konkretes Datum oder eine Uhrzeit, sondern beschreibt eine Periode, zum Beispiel: "2 Tage", "3 Stunden", "5 Minuten".

INTERVAL Syntax

Intervalle kannst du so angeben:

INTERVAL 'zahl zeiteinheit'

Beispiele:

INTERVAL '2 days' -- Zwei Tage
INTERVAL '3 hours' -- Drei Stunden
INTERVAL '15 minutes' -- Fünfzehn Minuten
INTERVAL '1 day 2 hours' -- Ein Tag und zwei Stunden

PostgreSQL unterstützt verschiedene Zeiteinheiten: year, month, day, hour, minute, second. Du kannst die auch in einem Ausdruck kombinieren.

Intervalle in Abfragen verwenden

Der Datentyp INTERVAL wird richtig nützlich, wenn du ihn mit anderen Zeittypen (DATE, TIMESTAMP) kombinierst. Schauen wir uns die wichtigsten Operationen an.

Intervall zu Datum/Uhrzeit addieren

Du kannst Intervalle zu Datums- oder Zeitwerten addieren. Zum Beispiel:

SELECT CURRENT_DATE + INTERVAL '7 days' AS lieferdatum;
-- Wir bekommen das Datum in 7 Tagen ab heute

Ergebnis:

lieferdatum
2023-10-08

Intervalle von Datum/Uhrzeit abziehen

Du kannst Intervalle nicht nur addieren, sondern auch abziehen:

SELECT NOW() - INTERVAL '2 hours' AS vor_zwei_stunden;
-- Wir bekommen die Uhrzeit vor zwei Stunden

Ergebnis:

vor_zwei_stunden
2023-10-01 10:00:00.000

Differenz zwischen zwei Daten berechnen

Einer der coolsten Features von INTERVAL ist das Berechnen der Differenz zwischen zwei Daten:

SELECT '2023-10-15'::DATE - '2023-10-01'::DATE AS tage_differenz;
-- Wie viele Tage liegen zwischen zwei Daten

Ergebnis:

tage_differenz
14 days

Beachte, dass das Ergebnis hier auch als Zeitintervall dargestellt wird.

Praktische Beispiele mit INTERVAL

Lieferdatum berechnen. Stell dir einen Online-Shop vor, wo die Lieferung zwischen 3 und 7 Tagen dauert. So kannst du die möglichen Lieferdaten berechnen:

SELECT CURRENT_DATE + INTERVAL '3 days' AS früheste_lieferung,
       CURRENT_DATE + INTERVAL '7 days' AS späteste_lieferung;

Ergebnis:

früheste_lieferung späteste_lieferung
2023-10-04 2023-10-08

Aufgabenlaufzeit berücksichtigen. Angenommen, es gibt eine Tabelle tasks, in der jede Aufgabe ein Startdatum hat. Du willst das Enddatum der Aufgabe berechnen, je nachdem wie lange sie dauert (in Stunden):

CREATE TABLE tasks (
    task_id SERIAL PRIMARY KEY,
    task_name TEXT,
    start_time TIMESTAMP,
    duration INTERVAL
);

INSERT INTO tasks (task_name, start_time, duration)
VALUES
('Bericht vorbereiten', '2023-10-01 09:00:00', INTERVAL '4 hours'),
('Anwendung testen', '2023-10-01 10:00:00', INTERVAL '2 hours 30 minutes');

SELECT task_name,
       start_time,
       start_time + duration AS end_time
FROM tasks;

Ergebnis:

task_name start_time end_time
Bericht vorbereiten 2023-10-01 09:00:00 2023-10-01 13:00:00
Anwendung testen 2023-10-01 10:00:00 2023-10-01 12:30:00

Vergleich der Laufzeiten. Manchmal willst du alle Aufgaben finden, die weniger als 3 Stunden gedauert haben:

SELECT task_name
FROM tasks
WHERE duration < INTERVAL '3 hours';

Ergebnis:

task_name
Anwendung testen

Nützliche Tricks mit Intervallen

Dynamische Intervallberechnung. Du kannst Intervalle mit anderen Operationen kombinieren. Zum Beispiel kannst du die Anzahl der Tage aus einer Spalte nehmen und sie in ein Intervall umwandeln:

SELECT CURRENT_DATE + (bestell_tage || ' days')::INTERVAL AS bestell_fälligkeitsdatum
FROM bestellungen;

Intervalle in Strings umwandeln. Manchmal willst du ein Intervall als String anzeigen:

SELECT INTERVAL '2 days 3 hours'::TEXT AS intervall_text;

Ergebnis:

intervall_text
2 days 03:00:00

Häufige Fehler bei INTERVAL

Mit INTERVAL zu arbeiten ist zwar mächtig, aber manchmal tricky. Ein typischer Fehler ist das falsche Format. Zum Beispiel, wenn du INTERVAL '2 hours and 30 minutes' schreibst, bekommst du einen Fehler, weil PostgreSQL das "and" nicht versteht. Richtig ist: INTERVAL '2 hours 30 minutes'.

Ein weiterer Fehler ist, die Zeiteinheit zu vergessen, wie bei INTERVAL '2'. PostgreSQL weiß dann nicht, was das für eine "2" ist, also gib immer die Einheit an (2 days, 2 hours).

1
Umfrage/Quiz
Arbeiten mit Datum und Uhrzeit, Level 31, Lektion 4
Nicht verfügbar
Arbeiten mit Datum und Uhrzeit
Arbeiten mit Datum und Uhrzeit
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION