sql >> Database teknologi >  >> RDS >> Oracle

Sådan bestiller du efter månedsnavn i PostgreSQL eller Oracle

Problem:

Du vil sortere rækkerne efter månedsnummer, givet månedsnavne (du ønsker, at januar skal vises først, december sidste).

Eksempel:

birthday tabel indeholder to kolonner:navn og birthday_month . Månederne er angivet i navne, ikke i tal.

navn fødselsdag_måned
Ronan Tisha NULL
December Januar
Angie Julia April
Narelle Dillan April
Purdie Casey Januar
Donna Nell NULL
Blaze Graeme Oktober

Du vil sortere rækkerne efter birthday_month .

Løsning:

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

Resultatet ser sådan ud (rækkerne er sorteret i stigende rækkefølge efter birthday_month ):

navn fødselsdag_måned
Purdie Casey Januar
Angie Julia April
Narelle Dillan April
Blaze Graeme Oktober
Ronan Tisha Januar
December NULL
Donna Nell NULL

Diskussion:

For at sortere rækkerne efter måned fra januar til december, skal du konvertere måneden til et tal ('January ' til 1, 'February ' til 2 , etc.). Ellers vil du se 'December ' før 'January '. Funktionen TO_DATE(fødselsdag_måned, 'Måned') konverterer et fuldt månedsnavn til en dato i '0001-MM-01 ' format. For eksempel får du '0001-12-01 ' for december.

Du kan nu bruge EXTRACT(MONTH FROM date)-funktionen til at udtrække måneden fra denne datoværdi. Måneden vil være et tal mellem 1 og 12 .

Ved at kombinere disse to funktioner kan du få måneden som et tal ved hjælp af følgende formel:

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

Sæt dette udtryk efter ORDER BY at sortere rækkerne efter måned. Hvis du gerne vil se den seneste måned først, skal du sortere i faldende rækkefølge. For at gøre dette skal du bruge en DESC søgeord som dette:

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

Bemærk, at NULL i PostgreSQL og Oracle s vises sidst ved sortering i stigende rækkefølge og først ved sortering i faldende rækkefølge. Også rækkerne med den samme birthday_month vises i tilfældig rækkefølge (du kan muligvis se Angie Julia anden og Narelle Dillan tredje, eller Narelle Dillan anden og Angie Julia tredje).


  1. Hvordan indsætter man utf-8 mb4 karakter (emoji i ios5) i mysql?

  2. TABLOCK vs TABLOCKX

  3. returnere resultatsæt fra funktion

  4. JSON_SET() vs JSON_INSERT() vs JSON_REPLACE() i MySQL:Hvad er forskellen?