Daten vergleichen
SQLite hat keinen besonderen Typ für Daten. Pixel Shop speichert sie als Text in der Form 'JJJJ-MM-TT': das Jahr, der Monat und der Tag, mit einer Null vor einstelligen Monaten und Tagen. Der 14. März 2024 ist '2024-03-14'. Diese Form ist ein internationaler Standard (ISO 8601), und fast jede Datenbank und Programmiersprache versteht sie.
In einer Bedingung schreibst du ein Datum wie jeden anderen Text in einfache Anführungszeichen. Die Bestellungen vom Valentinstag 2025:
SELECT id, kunde_id, bestellt_am
FROM bestellungen
WHERE bestellt_am = '2025-02-14';| id | kunde_id | bestellt_am |
|---|---|---|
| 16 | 11 | 2025-02-14 |
Auch die anderen Vergleiche funktionieren mit Daten und geben dank der Reihenfolge der Teile die richtigen Antworten. Text wird ab dem ersten Zeichen verglichen, also entscheidet zuerst das Jahr, dann der Monat und dann der Tag, genau wie bei Daten. Das hast du in der vorigen Lektion gesehen, als ORDER BY solche Daten vom ältesten an sortiert hat. Ein früheres Datum ist kleiner, ein späteres größer. Die Bestellungen ab Dezember 2025:
SELECT id, bestellt_am
FROM bestellungen
WHERE bestellt_am >= '2025-12-01'
ORDER BY bestellt_am;| id | bestellt_am |
|---|---|
| 29 | 2025-12-12 |
| 30 | 2025-12-22 |
Für ein ganzes Jahr fragst du nach den Daten vom 1. Januar dieses Jahres (eingeschlossen) bis zum 1. Januar des nächsten Jahres (nicht eingeschlossen). Die Bestellungen aus 2024:
SELECT id, bestellt_am
FROM bestellungen
WHERE bestellt_am >= '2024-01-01'
AND bestellt_am < '2025-01-01'
ORDER BY bestellt_am;| id | bestellt_am |
|---|---|
| 1 | 2024-01-20 |
| 2 | 2024-02-14 |
| 3 | 2024-02-29 |
| … | … |
Warum < '2025-01-01' und nicht <= '2024-12-31'? Bei Daten wie denen des Shops funktionieren beide. Aber manche Spalten enthalten auch eine Uhrzeit, wie '2024-12-31 18:30', und dieser Text ist größer als '2024-12-31', also würde <= den Abend an Silvester weglassen. „Kleiner als der erste Tag des nächsten Jahres“ stimmt jedes Mal.
Zeilen mit NULL statt eines Datums, wie Robot Rebellion ohne Erscheinungsdatum, werden von keiner dieser Bedingungen gefunden. Warum, lernst du in der letzten Übung dieser Lektion.
Typischer Fehler: ein Datum ohne Anführungszeichen. WHERE erschienen > 2024-01-01 ist kein Fehler, aber SQLite liest 2024-01-01 als Rechnung: 2024 minus 1 minus 1, also 2022. Die Abfrage findet dann die Spiele, die ab 2022 erschienen sind. Ein Datum in einer anderen Form, wie '14.3.2024' oder '2024-3-14', ist nicht besser: Es wird als Text Zeichen für Zeichen verglichen, und die Ergebnisse sind falsch, ohne dass es einen Fehler gibt.
So schreibst du es:
Anweisungen
- 1
Zeige den Titel und das Erscheinungsdatum der Spiele, die vor 2022 erschienen sind, die ältesten zuerst:
titel erschienen Cube Logic 2020-02-11 Castle Siege 2021-05-20 Ocean Deep 2021-08-30 - 2
Zeige darunter den Namen und das Datum des Beitritts (
beigetreten) der Kunden, die 2024 dem Shop beigetreten sind, sortiert nach dem Datum des Beitritts:name beigetreten Jonas Hartmann 2024-01-08 Mia Lange 2024-03-19 Leon Wagner 2024-05-27 Ida Zimmermann 2024-08-14 Oskar Klein 2024-11-30