Zum Inhalt
wannacode

Datumsfunktionen

Kurz gesagt: In SQLite sind Datumsangaben Text wie 2026-10-25, und date, strftime und julianday addieren Tage, ziehen Jahr oder Monat heraus und zählen die Tage zwischen zwei Daten.

Problem

Bis wann kann ich es zurückgeben?

Ein Kunde schreibt: „Bis wann kann ich meine Bestellung zurückgeben?“ Der Shop gibt 30 Tage ab dem Bestelldatum. Heute ist der 25. Oktober 2026.

Tage im Kalender zu zählen ist langsam, und am Monatsende vertut man sich leicht. Lass die Datenbank rechnen.

Die Idee

Ein Datum plus Tage

Im Shop sind Datumsangaben Text in der Form Jahr-Monat-Tag: 2026-10-25. Das ist der internationale Standard (ISO 8601). Deshalb wurden Datumsangaben bisher richtig sortiert und verglichen.

Die Funktion date(Datum, Änderung) rechnet mit Datumsangaben:

SQLDatenbank: Shop

Bestellung 54 kann bis einschließlich heute zurückgegeben werden. Änderungen können Tage, Monate und Jahre sein, vorwärts oder rückwärts, und 'start of month' liefert den ersten Tag des Monats:

SQLDatenbank: Shop
Genauer, für Neugierige

Diese Funktionen sind streng bei der Form des Datums. Ohne führende Null (2026-9-30) liefert date NULL, und der Vergleich als Text lügt: '2026-10-25' kommt vor '2026-9-30', weil „1“ vor „9“ kommt. Und '+1 month' vom 31. Januar ergibt den 31. Februar, also den 3. März:

SQLDatenbank: Shop

Speichere Datumsangaben also immer mit führenden Nullen und sei vorsichtig, wenn du Monate zu den letzten Tagen eines Monats addierst.

Probier es aus

Die Zahlungsfrist

Neue Bestellungen (new) müssen innerhalb von 3 Tagen nach der Bestellung bezahlt werden. Zeige die Nummer, das Datum und die Frist in einer Spalte namens pay_until.

SQLDatenbank: Shop

Die Idee

Jahr, Monat, Tag

strftime(Format, Datum) zieht einen Teil des Datums heraus: '%Y' ist das Jahr, '%m' der Monat, '%d' der Tag, '%w' der Wochentag (0 ist Sonntag, 6 ist Samstag).

SQLDatenbank: Shop

Das Ergebnis ist Text, mit führender Null: Der Monat ist 03, nicht 3.

Sieh es dir an

Im März angemeldet

Das Marketing will die Kunden, die sich im März angemeldet haben, in irgendeinem Jahr. Führe aus:

SQLDatenbank: Shop
1. Warum findet WHERE strftime('%m', joined_at) = 3 niemanden?

Mit derselben Form, Text mit führender Null, kommen zwei heraus:

SQLDatenbank: Shop

Die Idee

Wie viele Tage zwischen zwei Daten

julianday(Datum) macht aus dem Datum eine Zahl: wie viele Tage seit einem sehr alten Startdatum vergangen sind. Die Zahl selbst brauchst du nicht, aber die Differenz zweier solcher Zahlen ist die Anzahl der Tage zwischen den Daten.

Wie viele Tage die Küchenprodukte schon im Shop sind:

SQLDatenbank: Shop
Genauer, für Neugierige

In einem echten Bericht schreibst du statt '2026-10-25' lieber date('now') oder CURRENT_DATE: das heutige Datum. In SQLite sind beide in UTC, nicht in Ortszeit, deshalb können sich rund um Mitternacht dein lokales Datum und das der Datenbank um einen Tag unterscheiden. Die Lektionen benutzen ein festes Datum, damit das Ergebnis jeden Tag dasselbe ist.

Hat das Datum auch eine Uhrzeit (2026-10-25 18:20:00), funktionieren datetime und time wie date, und julianday liefert auch einen Teil eines Tages: 12 Stunden sind 0.5.

Probier es aus

Bezahlt und wartend

Bezahlte Bestellungen (paid) wurden noch nicht verschickt. Wie viele Tage wartet jede bis zum 25. Oktober 2026? Zeige Nummer, Datum und die Tage in einer Spalte namens waiting, die am längsten wartende zuerst.

SQLDatenbank: Shop

Übung

Zwei Aufgaben

1. Der Kurier arbeitet sonntags nicht. Welche Bestellungen wurden an einem Sonntag aufgegeben? Zeige Nummer und Datum.

Die Bestellungen, die an einem Sonntag aufgegeben wurden:

SQLDatenbank: Shop

2. Welche zugestellten Bestellungen können heute, am 25. Oktober 2026, noch zurückgegeben werden? Zeige Nummer, Datum und die Rückgabefrist in einer Spalte namens return_until.

Die zugestellten Bestellungen, die noch zurückgegeben werden können:

SQLDatenbank: Shop

Test

Teste dich

1. Was ergibt date('2026-10-25', '+7 days')?
2. Wie viele Tage ergibt julianday('2026-10-25') - julianday('2026-10-01')?
3. Welche Bedingung findet die Kunden, die sich 2025 angemeldet haben?
4. Warum schreiben die Lektionen '2026-10-25' und nicht date('now')?

Erstellt von Ivo Gergov im Rahmen der Kampagne von Evo Tech für zugängliche Programmierausbildung ·