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;