Datumsarithmetik und Intervalle
Zeiträume addieren und subtrahieren sowie Differenzen zwischen Datumsangaben berechnen.
Datumsarithmetik und Intervalle ist eine kostenlose Coding Interview Prep-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Coding Interview Prep-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Coding Interview Prep-Kurs umfasst insgesamt 4 Lektionen.
Warum Datumsarithmetik in Vorstellungsgesprächen vorkommt
Datumsarithmetik gehört zu den praktischsten SQL-Fähigkeiten. Deshalb greifen Interviewer bei Stellen für Analystinnen und Analysten sowie Backend-Entwicklerinnen und -Entwickler häufig darauf zurück. Fast jede Geschäftsfrage hat einen zeitlichen Aspekt: letzte 30 Tage, Bestellungen pro Woche, Tage seit der Registrierung.
Die Schwierigkeit besteht darin, dass Datumsfunktionen der am wenigsten standardisierte Teil von SQL sind. Dieselbe Operation hat in PostgreSQL, MySQL und SQL Server eine unterschiedliche Syntax. Eine gute Kandidatin oder ein guter Kandidat erklärt zuerst das Konzept klar und passt anschließend die Syntax an den jeweiligen Dialekt an.
- Zeitraum hinzufügen oder abziehen
- Die Differenz zwischen zwei Datumsangaben berechnen
- Mit
INTERVAL-Werten arbeiten
Der Datentyp INTERVAL
In PostgreSQL und im SQL-Standard ist ein Zeitraum ein eigenständiger Wert namens Interval. Sie addieren ihn mit den einfachen Operatoren + und - zu einem Datum oder Zeitstempel beziehungsweise ziehen ihn davon ab.
So lassen sich Ausdrücke wie „vor 30 Tagen“ oder „in 3 Monaten“ am klarsten formulieren. Interviewer schätzen dies, weil es wie natürliche Sprache lesbar ist.
SELECT
CURRENT_DATE,
CURRENT_DATE + INTERVAL '7 days' AS next_week,
CURRENT_DATE - INTERVAL '1 month' AS last_month,
NOW() + INTERVAL '90 minutes' AS soon;Zeiträume in verschiedenen Dialekten hinzufügen
Interviewer fragen häufig: „Wie würden Sie in MySQL im Vergleich zu SQL Server 7 Tage hinzufügen?“ Die Kenntnis der drei großen Dialekte zeigt praktische Erfahrung.
- PostgreSQL:
d + INTERVAL '7 days' - MySQL:
DATE_ADD(d, INTERVAL 7 DAY) - SQL Server:
DATEADD(day, 7, d)
Das Konzept ist identisch, nur die Schreibweise ändert sich. Nennen Sie immer den Dialekt, für den Sie schreiben.
-- MySQL
SELECT DATE_ADD(order_date, INTERVAL 7 DAY) AS due_date FROM orders;
-- SQL Server
SELECT DATEADD(day, 7, order_date) AS due_date FROM orders;Differenz zwischen zwei Datumsangaben
Die andere Seite der Datumsarithmetik besteht darin, zu berechnen, wie weit zwei Datumsangaben auseinanderliegen. Das Ergebnis hängt von der Einheit und vom Dialekt ab.
In PostgreSQL ergibt die Subtraktion zweier date-Werte direkt eine ganze Zahl von Tagen. Die Subtraktion zweier timestamp-Werte ergibt dagegen ein Intervall.
-- Postgres: date - date returns an integer (days)
SELECT shipped_date - order_date AS days_to_ship
FROM orders;DATEDIFF und seine Tücken
DATEDIFF gibt es in MySQL und SQL Server, es verhält sich jedoch unterschiedlich – eine beliebte Falle in Interviews.
- MySQL:
DATEDIFF(end, start)gibt ausschließlich ganze Tage zurück. - SQL Server:
DATEDIFF(unit, start, end)erwartet eine Einheit und zählt Grenzüberschreitungen, nicht vollständig vergangene Einheiten.
Dieses Verhalten ist wichtig: DATEDIFF(year, '2023-12-31', '2024-01-01') gibt in SQL Server 1 zurück, obwohl nur ein Tag vergangen ist.
-- SQL Server: counts boundaries, not elapsed time
SELECT DATEDIFF(year, '2023-12-31', '2024-01-01'); -- 1
SELECT DATEDIFF(day, '2023-12-31', '2024-01-01'); -- 1Alter in Jahren richtig berechnen
„Berechnen Sie das Alter eines Kunden in Jahren“ ist eine klassische Aufgabe. Eine naive Tagesdifferenz geteilt durch 365 weicht wegen der Schaltjahre ab. PostgreSQL bietet AGE(), das ein echtes Kalenderintervall zurückgibt.
Für eine saubere ganzzahlige Jahreszahl extrahieren Sie den Jahresanteil des Alters.
-- Postgres
SELECT
birth_date,
AGE(CURRENT_DATE, birth_date) AS exact_age,
EXTRACT(YEAR FROM AGE(CURRENT_DATE, birth_date)) AS age_years
FROM customers;Ausgearbeitetes Beispiel: Bestellungen der letzten 30 Tage
Ein nahezu universeller Filter in Vorstellungsgesprächen. Vergleichen Sie die Datumsspalte richtig mit einem berechneten Grenzwert, anstatt die Spalte in eine Funktion einzuschließen.
Wenn Sie order_date mit einem konstanten Grenzwert vergleichen, bleibt ein Index auf order_date nutzbar. Auf diesen Indexaspekt kommen wir später zurück.
SELECT COUNT(*) AS recent_orders
FROM orders
WHERE order_date >= CURRENT_DATE - INTERVAL '30 days';Halboffene Bereiche für einen Kalendermonat
Wenn Sie nach „allen Bestellungen im März 2024“ gefragt werden, vermeiden Sie BETWEEN '2024-03-01' AND '2024-03-31' für eine Zeitstempelspalte. Dadurch werden Zeilen um 23 Uhr am 31. März übersehen, und es kann leicht zu Fehlern an den Grenzen kommen.
Das robuste Muster ist ein halboffenes Intervall: >= ab Monatsbeginn und < ab dem Beginn des Folgemonats. Es funktioniert unabhängig von der Genauigkeit der Spalte.
SELECT *
FROM orders
WHERE order_ts >= DATE '2024-03-01'
AND order_ts < DATE '2024-04-01';EXTRACT und Datumsteile
Eine einzelne Komponente aus einem Datum zu extrahieren gehört zur täglichen Arbeit im Reporting. Die Standardfunktion ist EXTRACT(part FROM d), die von PostgreSQL und MySQL unterstützt wird.
EXTRACT(YEAR FROM d),MONTH,DAYEXTRACT(DOW FROM d)für den Wochentag- SQL Server verwendet stattdessen
DATEPART(weekday, d)
Beachten Sie: Wenn Sie nur MONTH extrahieren, werden Märze aus verschiedenen Jahren zusammengefasst. Das ist selten das gewünschte Ergebnis.
SELECT
EXTRACT(YEAR FROM order_ts) AS yr,
EXTRACT(MONTH FROM order_ts) AS mo,
COUNT(*) AS n
FROM orders
GROUP BY 1, 2
ORDER BY 1, 2;Weiterführendes Beispiel: Tage bis zum nächsten Geburtstag
Eine anspruchsvollere Rechenaufgabe, die Extraktion und Addition kombiniert. Erstellen Sie aus dem Geburtsmonat und dem Geburtstag den Geburtstag für dieses Jahr. Wenn er bereits vergangen ist, verschieben Sie ihn ins nächste Jahr.
Wenn Sie dies laut durchgehen, zeigen Sie dem Interviewer, dass Sie Randfälle berücksichtigen können, etwa einen Geburtstag, der in diesem Jahr bereits stattgefunden hat.
-- Postgres
SELECT
name,
CASE
WHEN MAKE_DATE(EXTRACT(YEAR FROM CURRENT_DATE)::int,
EXTRACT(MONTH FROM birth_date)::int,
EXTRACT(DAY FROM birth_date)::int) >= CURRENT_DATE
THEN MAKE_DATE(EXTRACT(YEAR FROM CURRENT_DATE)::int,
EXTRACT(MONTH FROM birth_date)::int,
EXTRACT(DAY FROM birth_date)::int) - CURRENT_DATE
ELSE MAKE_DATE(EXTRACT(YEAR FROM CURRENT_DATE)::int + 1,
EXTRACT(MONTH FROM birth_date)::int,
EXTRACT(DAY FROM birth_date)::int) - CURRENT_DATE
END AS days_until
FROM customers;Erster und letzter Tag des Monats
„Geben Sie den letzten Tag des Monats jeder Bestellung aus“ prüft, ob Sie zu einer integrierten Funktion greifen oder das Problem neu erfinden. PostgreSQL kombiniert DATE_TRUNC mit Intervallarithmetik; MySQL bietet dafür direkt LAST_DAY().
Der Trick für den letzten Tag in Postgres: Auf den Monatsbeginn abrunden, einen Monat addieren und einen Tag abziehen.
-- Postgres
SELECT
DATE_TRUNC('month', order_ts) AS month_start,
DATE_TRUNC('month', order_ts) + INTERVAL '1 month - 1 day' AS month_end
FROM orders;
-- MySQL: LAST_DAY(order_ts)Kurzer Check
Prüfen Sie Ihr Verständnis des unterschiedlichen Verhaltens bei Datumsdifferenzen in verschiedenen Dialekten.
Zusammenfassung: Datumsarithmetik und Intervalle
Die wichtigsten Punkte für das Vorstellungsgespräch:
- Verwenden Sie in Postgres
INTERVAL-Werte mit+/-, in MySQLDATE_ADD/DATEDIFFund in SQL ServerDATEADD/DATEDIFF. - SQL Server DATEDIFF zählt Grenzüberschreitungen, nicht verstrichene Einheiten – die wichtigste Falle.
- Für das Alter in Jahren extrahieren Sie den Wert aus
AGE(), anstatt die Tagesanzahl durch 365 zu teilen. - Filtern Sie aktuelle Zeilen, indem Sie die Spalte mit einem berechneten Grenzwert vergleichen, und verwenden Sie für Monatszeiträume halboffene Bereiche (
>= start AND < next).
Nennen Sie zuerst das Konzept und passen Sie anschließend den Dialekt an.
Häufig gestellte Fragen
Ist die Lektion „Datumsarithmetik und Intervalle“ kostenlos?
Ja — der vollständige Text von „Datumsarithmetik und Intervalle“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Coding Interview Prep-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Coding Interview Prep-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Datumsarithmetik und Intervalle“?
Zeiträume addieren und subtrahieren sowie Differenzen zwischen Datumsangaben berechnen. Du übst Coding Interview Prep mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Coding Interview Prep zu starten?
Keine Vorkenntnisse erforderlich. Coding Interview Prep auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „Datumsarithmetik und Intervalle“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Coding Interview Prep-Lektion Code schreiben und ausführen?
Ja. Jede Coding Interview Prep-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Datumsarithmetik und Intervalle
- Datumsangaben abschneiden und gruppieren
- Zeichenfolgen analysieren und formatieren
- Zeitzonen und Zeitstempel