Práce s daty
Data jsou v obchodě Pixel Shop texty ve tvaru 'RRRR-MM-DD'. Zvláštní typ pro data SQLite nemá, ale má funkce, které takovým textům rozumějí a umějí s nimi počítat.
strftime(format, datum) (z anglického „string format time“) napíše datum v jiném tvaru. Formát je text, ve kterém %Y znamená rok, %m měsíc a %d den; všechno ostatní se z něj opíše, jak je. Česky se datum píše s tečkami:
SELECT nazev, vydano,
strftime('%Y', vydano) AS rok,
strftime('%d.%m.%Y', vydano) AS ceske_datum
FROM hry
LIMIT 3;| nazev | vydano | rok | ceske_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 |
Výsledek strftime je vždycky text, i když vypadá jako číslo: rok je '2024', ne 2024. Proč na tom záleží, uvidíte později v této lekci. Pozor na velká písmena ve formátu: %M není měsíc, ale minuty, a ty jsou u data bez času 00.
date(datum, posun) datum posune. Posun je anglický text jako '+7 days' (o 7 dní později), '-1 month' (o měsíc dřív) nebo '+1 year' (o rok později) a výsledek je zase datum v obvyklém tvaru:
SELECT date('2024-03-14', '+7 days') AS za_tyden,
date('2024-03-14', '-1 month') AS pred_mesicem,
date('2024-03-14', 'start of month') AS prvni_den;| za_tyden | pred_mesicem | prvni_den |
|---|---|---|
| 2024-03-21 | 2024-02-14 | 2024-03-01 |
date ví, kolik dní má který měsíc, i o přestupných rocích: týden po 2024-02-25 je 2024-03-03. Můžete mu dát i několik posunů a provede je postupně: date(vydano, 'start of month', '+1 month', '-1 day') je poslední den měsíce, ve kterém hra vyšla. Jen na jedno pozor: měsíc po 31. lednu by byl 31. února, který neexistuje, a tak SQLite pokračuje do března: date('2024-01-31', '+1 month') je 2024-03-02.
Funkce pro data se obvykle píšou malými písmeny, tak jako v dokumentaci SQLite; fungují ale i velkými, stejně jako názvy ostatních funkcí. Zvláštní datum je 'now' (teď): date('now') je dnešní datum a date('now', '+30 days') datum za 30 dní. Skutečné aplikace ho používají pořád, tato cvičení ale ne, protože jeho výsledek se každý den mění.
Typická chyba: formát nebo posun bez apostrofů. strftime(%Y, vydano) skončí chybou near "%": syntax error. Formáty i posuny jsou texty, a tak patří do apostrofů.
Jak psát:
Pokyny
Pro měsíční přehled prodejů ukažte ID a datum každé objednávky a její měsíc ve tvaru 2024-01 jako mesic. Objednávky seřaďte podle ID:
| id | datum | mesic |
|---|---|---|
| 1 | 2024-01-20 | 2024-01 |
| 2 | 2024-02-14 | 2024-02 |
| 3 | 2024-02-29 | 2024-02 |
| … | … | … |
Zákazníci mohou hru vrátit do 14 dnů. Pod tím ukažte ID a datum každé objednávky a poslední den pro vrácení, 14 dní po objednávce, jako vratit_do. Objednávky seřaďte podle ID:
| id | datum | vratit_do |
|---|---|---|
| 1 | 2024-01-20 | 2024-02-03 |
| 2 | 2024-02-14 | 2024-02-28 |
| 3 | 2024-02-29 | 2024-03-14 |
| … | … | … |
Noví zákazníci dostanou na měsíc uvítací slevu. Pod tím ukažte jméno a datum registrace každého zákazníka a datum o měsíc pozdější jako sleva_do. Zákazníky seřaďte podle data registrace:
| jmeno | registrace | sleva_do |
|---|---|---|
| Eva Novotná | 2023-01-15 | 2023-02-15 |
| Jakub Dvořák | 2023-02-03 | 2023-03-03 |
| Tereza Svobodová | 2023-04-21 | 2023-05-21 |
| … | … | … |
Začněte programovat zdarma
7/10