Datové typy
Každý sloupec tabulky STRICT má jeden z pěti typů:
INTEGER(neboINT) – celá čísla: ceny v celých korunách, počty kusů, ID, roky.REAL– desetinná čísla, třeba 4.25 nebo 1.5. V SQL se píšou s desetinnou tečkou, ne s čárkou.TEXT– text libovolné délky: jména, e-maily, komentáře.BLOB– syrové bajty, třeba obrázek nebo jiný soubor, uložené tak, jak jsou. Budete ho potřebovat jen zřídka.ANY– jakákoli hodnota, jako v tabulce bezSTRICT. Použijte ho, jen když sloupec opravdu musí obsahovat hodnoty různých druhů.
Typ pro datum SQLite nemá. Datum se ukládá jako TEXT ve tvaru 'RRRR-MM-DD', jako ve sloupcích vydano a datum obchodu. Proč, to víte z dřívějších lekcí: data v tomto tvaru se správně řadí i porovnávají a rozumí jim funkce jako strftime() a date(). Datum s časem se píše jako '2025-11-28 14:30:00'.
Nemá ani typ pro pravdu a nepravdu. Sloupec typu ano/ne je INTEGER s 1 pro ano a 0 pro ne a dotaz se ptá WHERE pouzito = 1 nebo WHERE pouzito = 0. Dárkové karty by obchod mohl ukládat takhle:
CREATE TABLE darkove_karty (
kod TEXT,
castka INTEGER,
prodano TEXT,
pouzito INTEGER
) STRICT;
INSERT INTO darkove_karty (kod, castka, prodano, pouzito)
VALUES ('DAR-7Q2X', 500, '2025-12-01', 1),
('DAR-K9LM', 1000, '2025-12-18', 0),
('DAR-3RTP', 500, '2025-12-21', 0);
SELECT kod, castka, prodano
FROM darkove_karty
WHERE pouzito = 0;| kod | castka | prodano |
|---|---|---|
| DAR-K9LM | 1000 | 2025-12-18 |
| DAR-3RTP | 500 | 2025-12-21 |
Proč je castka typu INTEGER, a ne REAL? Dárkové karty jsou stejně jako ceny obchodu v celých korunách. A když obchod potřebuje haléře, často je ukládá také jako celé číslo: 99,90 Kč jako 9990 haléřů. Desetinná čísla nejsou v počítači přesná (0.1 + 0.2 je o maličko víc než 0.3) a u peněz záleží na každém haléři. REAL se hodí pro hodnoty, které se spíš měří, než počítají na kusy: průměrné hodnocení, odehrané hodiny, hmotnost. Sloupec typu REAL udělá z celého čísla desetinné, takže 3 se vrátí jako 3.0.
Jiné databáze mají typů víc a potkáte je v jiných kurzech i v práci:
VARCHAR(n)– text o nejvýš n znacích, třebaVARCHAR(100)pro jméno.DATE,TIME,TIMESTAMP– data a časy.BOOLEAN–TRUE(pravda) neboFALSE(nepravda).DECIMAL(p, s)– přesná desetinná čísla, třebaDECIMAL(10, 2)pro částky s haléři.
Tabulka STRICT v SQLite přijme jen pět typů uvedených výše (a INT); jakýkoli jiný typ je chyba:
CREATE TABLE darkove_karty (
kod VARCHAR(20),
castka INTEGER
) STRICT;Error on line 1: unknown datatype for darkove_karty.kod: "VARCHAR(20)"V SQLite tedy pište TEXT pro text, data a časy, INTEGER pro celá čísla a hodnoty ano/ne a REAL pro desetinná čísla.
Typická chyba: datum v jiném tvaru, třeba '28.11.2025'. Je to text, takže ho databáze bez chyby uloží, ale neřadí se jako datum ('28.11.2025' je před '30.01.2024') a funkce pro data pro něj vrátí NULL. Data pište vždycky jako 'RRRR-MM-DD'.
Jak psát:
Pokyny
Obchod pořádá pro hráče akce. Vytvořte tabulku akce (STRICT) s těmito čtyřmi sloupci v tomto pořadí, každý se správným typem:
nazev– název akce,zacatek– den, kdy se koná,delka– jak dlouho trvá, v hodinách (může to být třeba 1,5),online– jestli je online (ano, nebo ne).
Vložte tyto čtyři akce a pak ukažte všechny sloupce všech akcí seřazené podle data:
- Retro večer, v obchodě 30. ledna 2026, na 2,5 hodiny,
- Logický maraton, online 21. února 2026, na 6 hodin,
- Speedrunový pohár, online 14. března 2026, na 3 hodiny,
- Křest nové hry, v obchodě 2. dubna 2026, na 1,5 hodiny.
Výsledek:
| nazev | zacatek | delka | online |
|---|---|---|---|
| Retro večer | 2026-01-30 | 2.5 | 0 |
| Logický maraton | 2026-02-21 | 6.0 | 1 |
| Speedrunový pohár | 2026-03-14 | 3.0 | 1 |
| Křest nové hry | 2026-04-02 | 1.5 | 0 |
Přidejte dotaz, který ukáže název a datum akcí, které jsou online, seřazené podle data:
| nazev | zacatek |
|---|---|
| Logický maraton | 2026-02-21 |
| Speedrunový pohár | 2026-03-14 |
Začněte programovat zdarma
2/10