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_esame |
---|---|
Matematica | 19-12-2019 |
Scienza | 05-01-2020 |
Salute | 05-01-2020 |
Inglese | 08-01-2020 |
Arte | NULLO |
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 PostgreSQL e in 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 exam_date
vengono visualizzati in ordine casuale (potresti vedere Science
secondo e Health
terzo, o Salute 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 |
Vuoi ordinare le righe in base alla data dell'esame.
Soluzione:
SELECT * FROM exam ORDER BY exam_year, EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')), exam_day;
Il risultato è simile a questo (le righe sono ordinate in ordine crescente per exam_year
, exam_month
e exam_date
):
soggetto | anno_esame | mese_esame | giorno_esame |
---|---|---|---|
Matematica | 2019 | Dicembre | 19 |
Salute | 2020 | gennaio | 5 |
Scienza | 2020 | gennaio | 5 |
Inglese | 2020 | gennaio | 8 |
Arte | NULLO | NULLO | NULLO |
Discussione:
Devi ordinare le righe in base a tre valori:l'anno, il mese e il giorno, ma per avere l'ordine corretto, devi convertire il mese in un numero ('January
' a 1
, 'February
' a 2
, eccetera.). Altrimenti, vedrai 'December
' prima di 'January
'. La funzione TO_DATE(mese_esame, 'Mese') converte il nome completo del mese 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 verrà restituito come numero.
Combinando queste due funzioni, puoi ottenere il mese come numero utilizzando la seguente formula:
EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month'))
Per ordinare le righe per data, è necessario ordinare per anno, mese e giorno (in questo ordine). Se desideri vedere prima l'ultimo esame, dovrai ordinarlo in ordine decrescente. Per fare ciò, devi usare un DESC
parola chiave dopo ogni colonna in ORDER BY
clausola.
SELECT * FROM exam ORDER BY exam_year DESC, EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')) DESC, exam_day DESC;