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

Come ordinare per data in SQLite

Problema:

Vuoi ordinare le righe per data.

Esempio 1:

L'exam la tabella ha due colonne, subject e exam_date .

soggetto data_esame
Matematica 19-12-2019
Inglese 08-01-2020
Scienza 05-01-2020
Salute 05-01-2020
Arte NULLO

Vuoi ordinare le righe per exam_date .

Soluzione:

SELECT *
FROM exam
ORDER BY exam_date;

Il risultato è simile a questo (le righe sono ordinate in ordine crescente per exam_date ):

Soggetto Data dell'esame
Arte NULLO
Matematica 19-12-2019
Scienza 05-01-2020
Salute 05-01-2020
Inglese 08-01-2020

Discussione:

Usa il ORDER BY parola chiave e il nome della colonna in base alla quale si desidera eseguire l'ordinamento. In questo modo, ordinerai i dati in ordine crescente in base a questa colonna. Puoi anche usare l'ASC parola chiave per chiarire che l'ordine è crescente (la prima data viene mostrata per prima, l'ultima data viene mostrata per ultima, ecc.).

SELECT *
FROM exam
ORDER BY exam_date ASC;

Se desideri visualizzare prima la data più recente e quella più recente per ultima, è necessario ordinare in ordine decrescente. Usa il DESC parola chiave in questo caso.

SELECT *
FROM exam
ORDER BY exam_date DESC;

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 exam_date vengono visualizzati in ordine casuale (potresti vedere Science secondo e Health terzo, o Health secondo e Science terzo).

Esempio 2:

L'exam tabella ha le seguenti colonne:subject , exam_year , exam_month e exam_day . I mesi sono indicati in nomi, non in numeri.

soggetto anno_esame mese_esame giorno_esame
Matematica 2019 Dicembre 19
Inglese 2020 gennaio 8
Scienza 2020 gennaio 5
Salute 2020 gennaio 5
Arte NULLO NULLO NULLO

Soluzione:

SELECT *
FROM exam
ORDER BY exam_year,
 (CASE exam_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),
  exam_day;

Il risultato è simile a questo (le righe sono ordinate in ordine crescente per exam_year , exam_month e exam_day ):

soggetto anno_esame mese_esame giorno_esame
Arte NULLO NULLO NULLO
Matematica 2019 Dicembre 19
Salute 2020 gennaio 5
Scienza 2020 gennaio 5
Inglese 2020 gennaio 8

Discussione:

Per ordinare le righe in base alla data dell'esame, è necessario ordinare prima per anno, quindi per mese numerico (non per nome del mese) e infine per giorno. Puoi convertire i nomi dei mesi in mesi numerici con un CASE WHEN clausola. Dopo il CASE parola chiave, specificare il nome della colonna. Quindi, dopo ogni QUANDO, indica il valore in questa colonna, utilizza la parola chiave THEN e specifica il nuovo valore che desideri assegnare al posto di quello vecchio. Qui, la colonna è exam_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 exam_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 quando ordini le righe per data, ovvero per anno, mese numerico e giorno.

ORDER BY exam_year,
 (CASE exam_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),
  exam_day

In questo modo, puoi ordinare le righe in ordine crescente per data. Il NULL s verrà visualizzato per primo. Per cambiare l'ordine in decrescente, usa il DESC parola chiave dopo ogni colonna in ORDER BY clausola. Ecco come dovrebbe essere l'intera query:

SELECT *
FROM exam
ORDER BY
  exam_year DESC,
  (CASE exam_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,
  exam_day DESC;

Nota che quando esegui l'ordinamento in ordine decrescente in SQLite, NULL Le s vengono visualizzate per ultime.