Funkce ve WHERE a ORDER BY

Funkce nejsou jen pro SELECT. Můžete je použít všude, kde může být hodnota, tedy i ve WHERE a v ORDER BY. Kteří zákazníci se zaregistrovali v roce 2024?

SELECT jmeno, registrace
FROM zakaznici
WHERE strftime('%Y', registrace) = '2024';
jmenoregistrace
Tomáš Veselý2024-01-08
Klára Horáková2024-03-19
Matěj Němec2024-05-27
Natálie Marková2024-08-14
Vojtěch Pokorný2024-11-30

SQLite pro každý řádek spočítá funkci a pak zkontroluje podmínku. Tady by stejné zákazníky našlo i LIKE '2024-%', ale pomocí funkcí se můžete zeptat na kteroukoli část hodnoty a z podmínky je hned jasné, o co jde: strftime('%m', registrace) = '03' najde zákazníky, kteří se zaregistrovali v březnu kteréhokoli roku, a LENGTH(jmeno) > 13 ty s dlouhým jménem.

Typická chyba: porovnání výsledku strftime s číslem. WHERE strftime('%Y', registrace) = 2024 nenajde nic, a dokonce ani neskončí chybou. strftime vrací text, '2024', a ten se pro SQLite číslu 2024 nerovná: text a číslo jsou dva různé druhy hodnot. Porovnávejte ho proto s textem v apostrofech. Totéž platí pro SUBSTR, jehož výsledek je také text.

Funkce také pomohou porovnat texty, u kterých nevíte, jak jsou napsané: WHERE LOWER(zanr) = 'rpg' najde hry žánru RPG, ať je žánr napsaný jakkoli. (U textů s diakritikou to kvůli omezení LOWER, o kterém už víte, spolehlivě nefunguje.)

V ORDER BY řadí funkce řádky podle vypočtené hodnoty. Tady od nejkratšího jména:

SELECT jmeno, LENGTH(jmeno) AS znaku
FROM zakaznici
ORDER BY LENGTH(jmeno), id
LIMIT 3;
jmenoznaku
Eva Novotná11
Matěj Němec11
Filip Beneš11

Jak už víte, ORDER BY může použít i alias sloupce: ORDER BY znaku, id řadí stejně. Ve WHERE většina databází aliasy nedovolí, protože podmínky kontroluje dřív, než spočítá sloupce výsledku. SQLite je benevolentní a dovolí je, ale ve WHERE je lepší napsat celou funkci znovu, aby vaše dotazy fungovaly i v jiných databázích.

Pokyny

Obchod plánuje vánoční sezonu. Ukažte ID a datum objednávek zadaných v prosinci kteréhokoli roku, seřazené podle data:

iddatum
132024-12-05
142024-12-20
152024-12-23
292025-12-12
302025-12-22

Pod tím ukažte tři nejdelší komentáře z recenzí a jejich délku jako znaku: nejdelší jako první, komentáře se stejnou délkou podle abecedy:

komentarznaku
Nejlepší RPG, jaké jsem za poslední roky hrál!46
Skvělý příběh, jen trochu dlouhý.33
Stojí za každou korunu.23

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

9/10