Problema:
Vuoi ordinare le righe in base al numero del mese, dati i nomi dei mesi (vuoi che gennaio venga mostrato per primo, dicembre per ultimo).
Esempio:
Il birthday
la tabella contiene due colonne:nome e birthday_month
. I mesi sono indicati in nomi, non in numeri.
nome | mese_compleanno |
---|---|
Ronan Tisha | NULLO |
Dicembre | gennaio |
Angie Julia | Aprile |
Narelle Dillan | Aprile |
Purdie Casey | gennaio |
Donna Nell | NULLO |
Blaze Graeme | ottobre |
Vuoi ordinare le righe per birthday_month
.
Soluzione:
SELECT * FROM birthday ORDER BY EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month'));
Il risultato è simile al seguente (le righe sono ordinate in ordine crescente per birthday_month
):
nome | mese_compleanno |
---|---|
Purdie Casey | gennaio |
Angie Julia | Aprile |
Narelle Dillan | Aprile |
Blaze Graeme | ottobre |
Ronan Tisha | gennaio |
Dicembre | NULLO |
Donna Nell | NULLO |
Discussione:
Per ordinare le righe per mese a partire da gennaio e termina con dicembre, devi convertire il mese in un numero ('January
' a 1, 'February
' a 2
, eccetera.). Altrimenti, vedrai 'December
' prima di 'January
'. La funzione TO_DATE(birthday_month, 'Mese') converte il nome di un mese intero in una data in '0001-MM-01
' formato. Ad esempio, ottieni '0001-12-01
' per dicembre.
È ora possibile utilizzare la funzione EXTRACT(MESE DA data) per estrarre il mese da questo valore di data. Il mese sarà un numero compreso tra 1
e 12
.
Combinando queste due funzioni, puoi ottenere il mese come numero utilizzando la seguente formula:
EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month'))
Inserisci questa espressione dopo ORDER BY
per ordinare le righe per mese. Se desideri visualizzare prima l'ultimo mese, dovrai ordinare in ordine decrescente. Per fare ciò, devi usare un DESC
parola chiave, come questa:
SELECT * FROM birthday ORDER BY EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month')) DESC;
Nota che in PostgreSQL e Oracle, NULL
I messaggi vengono visualizzati per ultimi quando si ordina in ordine crescente e per primi quando si ordina in ordine decrescente. Inoltre, le righe con lo stesso birthday_month
vengono visualizzati in ordine casuale (potresti vedere Angie Julia
secondo e Narelle Dillan
terzo, o Narelle Dillan
secondo e Angie Julia
terzo).