Datentypen
Jede Spalte einer STRICT-Tabelle hat einen von fünf Typen:
INTEGER(oderINT) – Ganzzahlen: Preise in ganzen Euro, Mengen, IDs, Jahreszahlen.REAL– Dezimalzahlen, wie 4.25 oder 1.5.TEXT– Text beliebiger Länge: Namen, E-Mail-Adressen, Kommentare.BLOB– rohe Bytes, etwa ein Bild oder eine andere Datei, so gespeichert, wie sie sind. Du wirst ihn selten brauchen.ANY– ein beliebiger Wert, wie in einer Tabelle ohneSTRICT. Verwende ihn nur, wenn eine Spalte wirklich Werte verschiedener Art aufnehmen muss.
SQLite hat keinen Typ für Datumsangaben. Ein Datum wird als TEXT in der Form 'YYYY-MM-DD' gespeichert, wie in den Spalten erschienen und bestellt_am des Shops. Du kennst den Grund aus den früheren Lektionen: Daten in dieser Form lassen sich richtig sortieren und vergleichen, und Funktionen wie strftime() und date() verstehen sie. Ein Datum mit Uhrzeit schreibt man als '2025-11-28 14:30:00'.
Es gibt auch keinen Typ für wahr und falsch. Eine Ja-Nein-Spalte ist ein INTEGER mit 1 für Ja und 0 für Nein, und eine Abfrage fragt nach WHERE benutzt = 1 oder WHERE benutzt = 0. So könnte der Shop seine Geschenkkarten speichern:
CREATE TABLE geschenkkarten (
code TEXT,
betrag INTEGER,
verkauft TEXT,
benutzt INTEGER
) STRICT;
INSERT INTO geschenkkarten (code, betrag, verkauft, benutzt)
VALUES ('GESCHENK-7Q2X', 25, '2025-12-01', 1),
('GESCHENK-K9LM', 50, '2025-12-18', 0),
('GESCHENK-3RTP', 25, '2025-12-21', 0);
SELECT code, betrag, verkauft
FROM geschenkkarten
WHERE benutzt = 0;| code | betrag | verkauft |
|---|---|---|
| GESCHENK-K9LM | 50 | 2025-12-18 |
| GESCHENK-3RTP | 25 | 2025-12-21 |
Warum ist betrag ein INTEGER und kein REAL? Geschenkkarten lauten, wie die Preise des Shops, auf ganze Euro. Und wenn ein Shop Cent braucht, speichert er sie oft auch als Ganzzahlen: 25,99 € werden als 2599 Cent gespeichert. Dezimalzahlen im Computer sind nicht exakt (0.1 + 0.2 ist ein winziges bisschen mehr als 0.3), und bei Geld zählt jeder Cent. REAL passt für Werte, die gemessen statt gezählt werden: eine Durchschnittsbewertung, gespielte Stunden, ein Gewicht. Eine REAL-Spalte macht aus einer Ganzzahl eine Dezimalzahl, also kommt 3 als 3.0 zurück.
Andere Datenbanken haben mehr Typen, und du wirst ihnen in anderen Kursen und bei der Arbeit begegnen:
VARCHAR(n)– Text mit höchstens n Zeichen, zum BeispielVARCHAR(100)für einen Namen.DATE,TIME,TIMESTAMP– Datum und Uhrzeit.BOOLEAN–TRUEoderFALSE.DECIMAL(p, s)– exakte Dezimalzahlen, etwaDECIMAL(10, 2)für Beträge mit Cent.
Eine STRICT-Tabelle in SQLite nimmt nur die fünf Typen oben (und INT) an; jeder andere Typ ist ein Fehler:
CREATE TABLE geschenkkarten (
code VARCHAR(20),
betrag INTEGER
) STRICT;Error on line 1: unknown datatype for geschenkkarten.code: "VARCHAR(20)"In SQLite schreibst du also TEXT für Text, Datum und Uhrzeit, INTEGER für Ganzzahlen und Ja-Nein-Werte und REAL für Dezimalzahlen.
Typischer Fehler: ein Datum in einer anderen Form, wie '28.11.2025'. Es ist ein Text, also speichert die Datenbank es ohne Fehler, aber es sortiert sich nicht als Datum ('28.11.2025' kommt vor '30.01.2024'), und die Datumsfunktionen liefern dafür NULL. Schreibe Datumsangaben immer als 'YYYY-MM-DD'.
So schreibst du es:
Anweisungen
- 1
Der Shop veranstaltet Events für Spieler. Erstelle eine
STRICT-Tabelleveranstaltungenmit diesen vier Spalten, in dieser Reihenfolge, jede mit dem richtigen Typ:name– der Name der Veranstaltung,beginn– der Tag, an dem sie stattfindet,stunden– wie lange sie dauert, in Stunden (es kann zum Beispiel 1,5 sein),online– ob sie online stattfindet (ja oder nein).
- 2
Füge diese vier Veranstaltungen ein und zeige dann alle Spalten aller Veranstaltungen, sortiert nach dem Datum:
- Retro-Abend, im Shop am 30.01.2026, 2,5 Stunden lang,
- Puzzle-Marathon, online am 21.02.2026, 6 Stunden lang,
- Speedrun-Cup, online am 14.03.2026, 3 Stunden lang,
- Launch-Party, im Shop am 02.04.2026, 1,5 Stunden lang.
Das Ergebnis:
name beginn stunden online Retro-Abend 2026-01-30 2.5 0 Puzzle-Marathon 2026-02-21 6.0 1 Speedrun-Cup 2026-03-14 3.0 1 Launch-Party 2026-04-02 1.5 0 - 3
Füge eine Abfrage hinzu, die den Namen und das Datum der Online-Veranstaltungen zeigt, sortiert nach dem Datum:
name beginn Puzzle-Marathon 2026-02-21 Speedrun-Cup 2026-03-14