SQLite
 sql >> Database >  >> RDS >> SQLite

Come ordinare per nome del mese in SQLite

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;