Porovnávání dat
SQLite nemá pro datum zvláštní typ. Pixel Shop ukládá data jako text ve tvaru 'RRRR-MM-DD': rok, měsíc a den, s nulou před jednocifernými měsíci a dny. 14. března 2024 je '2024-03-14'. Tento tvar je mezinárodní norma (ISO 8601) a rozumí mu skoro každá databáze i programovací jazyk.
V podmínce napíšete datum jako každý jiný text, do apostrofů. Objednávky ze svatého Valentýna 2025:
SELECT id, zakaznik_id, datum
FROM objednavky
WHERE datum = '2025-02-14';| id | zakaznik_id | datum |
|---|---|---|
| 16 | 11 | 2025-02-14 |
S datem fungují i ostatní porovnání, a to správně díky pořadí jeho částí. Text se porovnává od prvního znaku, takže nejdřív rozhodne rok, pak měsíc a nakonec den, přesně jak to u data má být. Viděli jste to v minulé lekci, když ORDER BY řadilo taková data od nejstaršího. Dřívější datum je menší, pozdější větší. Objednávky od prosince 2025:
SELECT id, datum
FROM objednavky
WHERE datum >= '2025-12-01'
ORDER BY datum;| id | datum |
|---|---|
| 29 | 2025-12-12 |
| 30 | 2025-12-22 |
Celý rok najdete jako dny od 1. ledna toho roku (včetně) do 1. ledna roku dalšího (bez něj). Objednávky z roku 2024:
SELECT id, datum
FROM objednavky
WHERE datum >= '2024-01-01'
AND datum < '2025-01-01'
ORDER BY datum;| id | datum |
|---|---|
| 1 | 2024-01-20 |
| 2 | 2024-02-14 |
| 3 | 2024-02-29 |
| … | … |
Proč < '2025-01-01' a ne <= '2024-12-31'? S daty, jaká má obchod, funguje obojí. Některé sloupce ale obsahují i čas, třeba '2024-12-31 18:30', a ten text je větší než '2024-12-31', takže <= by silvestrovský večer vynechalo. „Menší než první den dalšího roku“ platí vždycky.
Řádky, které mají místo data NULL, třeba Robot Rebellion bez data vydání, nenajde žádná z těchto podmínek. Proč, se dozvíte v posledním cvičení této lekce.
Typická chyba: datum bez apostrofů. WHERE vydano > 2024-01-01 není chyba, ale SQLite přečte 2024-01-01 jako výpočet: 2024 minus 1 minus 1, tedy 2022. Dotaz pak najde hry vydané od roku 2022. Nepomůže ani datum napsané jinak, třeba po česku '14.3.2024' nebo '2024-3-14': porovná se jako text, znak po znaku, a výsledky jsou špatně, aniž by se objevila chyba.
Jak psát:
Pokyny
Ukažte název a datum vydání her, které vyšly před rokem 2022, od nejstarší:
| nazev | vydano |
|---|---|
| Cube Logic | 2020-02-11 |
| Castle Siege | 2021-05-20 |
| Ocean Deep | 2021-08-30 |
Pod tím ukažte jméno a datum registrace (registrace) zákazníků, kteří se do obchodu zaregistrovali v roce 2024, seřazené podle data registrace:
| jmeno | registrace |
|---|---|
| Tomáš Veselý | 2024-01-08 |
| Klára Horáková | 2024-03-19 |
| Matěj Němec | 2024-05-27 |
| Natálie Marková | 2024-08-14 |
| Vojtěch Pokorný | 2024-11-30 |
Začněte programovat zdarma
7/12