sql >> Databáze >  >> RDS >> Oracle

Jak objednávat podle názvu měsíce v PostgreSQL nebo Oracle

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 NULL
Prosinec leden
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 EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month'));

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 od ledna do prosince, musíte měsíc převést na číslo ('January ' až 1, 'February ' až 2 , atd.). V opačném případě byste viděli 'December ' před 'January '. Funkce TO_DATE(birthday_month, 'Month') převede celý název měsíce na datum v '0001-MM-01 ' formát. Například získáte '0001-12-01 “ za prosinec.

Nyní můžete pomocí funkce EXTRACT (MONTH FROM date) extrahovat měsíc z této hodnoty data. Měsíc bude číslo mezi 1 a 12 .

Kombinací těchto dvou funkcí můžete získat měsíc jako číslo pomocí následujícího vzorce:

EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month'))

Vložte tento výraz za ORDER BY seřadit řádky podle měsíce. Chcete-li jako první zobrazit poslední měsíc, budete je muset seřadit sestupně. Chcete-li to provést, musíte použít DESC klíčové slovo, například toto:

SELECT *
FROM birthday
ORDER BY EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month')) DESC;

Všimněte si, že v PostgreSQL a Oracle NULL s se zobrazují jako poslední při vzestupném řazení a jako první 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í).


  1. Jak seřadit podle počtu v SQL?

  2. Použití Oracle JDeveloper 12c s databází Oracle, část 1

  3. 3 způsoby, jak naformátovat číslo jako procento v PostgreSQL

  4. Migrují všichni do cloudu?