Problém:
Chcete seřadit řádky podle čísla měsíce, daných názvů měsíců (chcete, aby se jako první zobrazoval leden, jako poslední prosinec).
Příklad:
birthday
tabulka obsahuje dva sloupce:jméno a birthday_month
. Měsíce jsou uvedeny ve jménech, nikoli v číslech.
name | narozeniny_měsíc |
---|---|
Ronan Tisha | leden |
Prosinec | Duben |
Angie Julia | Duben |
Narelle Dillanová | Duben |
Purdie Casey | leden |
Donna Nell | NULL |
Blaze Graeme | Říjen |
Chcete seřadit řádky podle birthday_month
.
Řešení:
SELECT * FROM birthday ORDER BY (CASE birthday_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END);
Výsledek vypadá takto (řádky jsou seřazeny vzestupně podle birthday_month
):
name | narozeniny_měsíc |
---|---|
Purdie Casey | leden |
Angie Julia | Duben |
Narelle Dillanová | Duben |
Blaze Graeme | Říjen |
Ronan Tisha | leden |
Prosinec | NULL |
Donna Nell | NULL |
Diskuse:
Chcete-li seřadit řádky podle měsíce, potřebujete měsíce v číslech (ne ve jménech). Názvy měsíců můžete převést na číselné měsíce pomocí CASE WHEN
doložka. Po CASE
klíčové slovo, zadejte název sloupce. Poté po každém WHEN
, uveďte hodnotu v tomto sloupci, použijte THEN
klíčové slovo a zadejte novou hodnotu, kterou chcete přiřadit místo staré. Zde je sloupec birthday_month
, aktuální hodnoty v tomto sloupci jsou 'January
', 'February
', …, 'December
' a nové hodnoty jsou číselné měsíce 1
, 2,
…, 12
. Po dokončení převodu všech hodnot nezapomeňte použít END
klíčové slovo pro uzavření CASE WHEN
doložka. Podívejte se:
CASE birthday_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END
Takto převedete název měsíce na číslo měsíce. Můžete jej použít k řazení řádků ve vzestupném pořadí podle měsíce – stačí jej použít v ORDER BY
doložka.
Všimněte si, že v SQLite NULL
s se zobrazují jako první při vzestupném řazení a jako poslední při sestupném řazení. Také řádky se stejným birthday_month
se zobrazují v náhodném pořadí (můžete vidět Angie Julia
druhý a Narelle Dillan
třetí, nebo Narelle Dillan
druhý a Angie Julia
Třetí). Chcete-li změnit pořadí na sestupné, použijte DESC
klíčové slovo za sloupcem v ORDER BY
doložka. Dotaz by měl vypadat následovně:
SELECT * FROM birthday ORDER BY (CASE birthday_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END) DESC;