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 | gennaio |
Dicembre | Aprile |
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 (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);
Il risultato è simile a questo (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, sono necessari i mesi in numeri (non nomi). Puoi convertire i nomi dei mesi in mesi numerici usando il CASE WHEN
clausola. Dopo il CASE
parola chiave, specificare il nome della colonna. Quindi, dopo ogni WHEN
, indica il valore in questa colonna, usa THEN
parola chiave e specifica il nuovo valore che desideri assegnare al posto del vecchio. Qui, la colonna è birthday_month
, i valori correnti in questa colonna sono 'January
', 'February
', …, 'December
', e i nuovi valori sono i mesi numerici 1
, 2,
…, 12
. Dopo aver finito di convertire tutti i valori, ricorda di usare il END
parola chiave per chiudere il CASE WHEN
clausola. Dai un'occhiata:
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
Ecco come convertire il nome di un mese in un numero di mese. Puoi usarlo per ordinare le righe in ordine crescente per mese:usalo in ORDER BY
clausola.
Nota che in SQLite, NULL
I messaggi vengono visualizzati per primi quando si ordina in ordine crescente e per ultimi 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). Per cambiare l'ordine in decrescente, usa il DESC
parola chiave dopo la colonna in ORDER BY
clausola. Ecco come dovrebbe apparire la query:
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;