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;