sql >> Databáze >  >> RDS >> SQLite

Jak objednávat podle názvu měsíce v SQLite

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;

  1. SQLiteException pomocí WHERE +KEY_Date+='+date+'

  2. Funkce CHARTOROWID() v Oracle

  3. Jak mohu vybrat mezi 1. dnem aktuálního měsíce a aktuálním dnem v MySQL?

  4. Nainstalujte a používejte Percona Toolkit na Centos 7