Mit Datumsangaben arbeiten
Datumsangaben sind im Pixel Shop Texte in der Form 'YYYY-MM-DD'. SQLite hat keinen besonderen Typ für Datumsangaben, aber es hat Funktionen, die solche Texte verstehen und damit rechnen können.
strftime(format, datum) (von „string format time“) schreibt ein Datum in einer anderen Form. Das Format ist ein Text, in dem %Y für das Jahr steht, %m für den Monat und %d für den Tag; alles andere wird unverändert übernommen:
SELECT titel, erschienen,
strftime('%Y', erschienen) AS jahr,
strftime('%d.%m.%Y', erschienen) AS deutsches_datum
FROM spiele
LIMIT 3;| titel | erschienen | jahr | deutsches_datum |
|---|---|---|---|
| Dragon Forge | 2024-03-14 | 2024 | 14.03.2024 |
| Pixel Racer | 2023-07-02 | 2023 | 02.07.2023 |
| Moon Farm | 2022-11-18 | 2022 | 18.11.2022 |
Das Ergebnis von strftime ist immer ein Text, auch wenn es wie eine Zahl aussieht: Das Jahr ist '2024', nicht 2024. Warum das wichtig ist, siehst du später in dieser Lektion. Achte auf Großbuchstaben im Format: %M ist nicht der Monat, sondern die Minuten, die in einem Datum ohne Uhrzeit 00 sind.
date(datum, modifikator) verschiebt ein Datum. Der Modifikator ist ein Text wie '+7 days', '-1 month' oder '+1 year', und das Ergebnis ist wieder ein Datum in der üblichen Form:
SELECT date('2024-03-14', '+7 days') AS eine_woche_spaeter,
date('2024-03-14', '-1 month') AS einen_monat_frueher,
date('2024-03-14', 'start of month') AS erster_tag;| eine_woche_spaeter | einen_monat_frueher | erster_tag |
|---|---|---|
| 2024-03-21 | 2024-02-14 | 2024-03-01 |
date weiß, wie viele Tage jeder Monat hat, Schaltjahre eingeschlossen: Eine Woche nach dem 25.02.2024 ist der 03.03.2024. Du kannst mehrere Modifikatoren angeben, und sie werden der Reihe nach angewendet: date(erschienen, 'start of month', '+1 month', '-1 day') ist der letzte Tag des Monats, in dem ein Spiel erschienen ist. Eine Sache ist zu beachten: Ein Monat nach dem 31. Januar wäre der 31. Februar, den es nicht gibt, also läuft SQLite in den März weiter: date('2024-01-31', '+1 month') ist 2024-03-02.
Die Datumsfunktionen werden meist klein geschrieben, wie es die Dokumentation von SQLite tut; wie alle Funktionsnamen funktionieren sie auch in Großbuchstaben. Ein besonderes Datum ist 'now': date('now') ist das heutige Datum und date('now', '+30 days') das Datum in 30 Tagen. Echte Anwendungen benutzen das ständig, diese Übungen aber nicht, weil sich sein Ergebnis jeden Tag ändert.
Typischer Fehler: ein Format oder ein Modifikator ohne Anführungszeichen. strftime(%Y, erschienen) scheitert mit near "%": syntax error. Formate und Modifikatoren sind Texte, also stehen sie in einfachen Anführungszeichen.
So schreibst du es:
Anweisungen
- 1
Zeige für den monatlichen Verkaufsbericht die ID und das Datum jeder Bestellung und ihren Monat in der Form
2024-01alsmonat. Sortiere die Bestellungen nach der ID:id bestellt_am monat 1 2024-01-20 2024-01 2 2024-02-14 2024-02 3 2024-02-29 2024-02 … … … - 2
Kunden können ein Spiel innerhalb von 14 Tagen zurückgeben. Zeige darunter die ID und das Datum jeder Bestellung und den letzten Tag für eine Rückgabe, 14 Tage nach der Bestellung, als
rueckgabe_bis. Sortiere die Bestellungen nach der ID:id bestellt_am rueckgabe_bis 1 2024-01-20 2024-02-03 2 2024-02-14 2024-02-28 3 2024-02-29 2024-03-14 … … … - 3
Neue Kunden bekommen einen Monat lang einen Willkommensrabatt. Zeige darunter den Namen und das Beitrittsdatum jedes Kunden und das Datum einen Monat später als
rabatt_bis. Sortiere die Kunden nach dem Beitrittsdatum:name beigetreten rabatt_bis Emma Becker 2023-01-15 2023-02-15 Lukas Neumann 2023-02-03 2023-03-03 Olivia Braun 2023-04-21 2023-05-21 … … …