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 |
---|---|
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 MySQL, 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
terzo e Health
quarto, o Health
terzo e Science
quarto).
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 STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d');
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 |
---|---|---|---|
Arte | NULLO | NULLO | NULLO |
Matematica | 2019 | Dicembre | 19 |
Salute | 2020 | gennaio | 5 |
Scienza | 2020 | gennaio | 5 |
Inglese | 2020 | gennaio | 8 |
Discussione:
Per ordinare per data, creare valori di data dai valori di anno, mese e giorno. A tale scopo, utilizzare la funzione STR_TO_DATE(). Se hai una data memorizzata come stringa nel 'Year Month Day
' format, puoi trasmetterlo a una data usando STR_TO_DATE(date_string, '%Y %M %d')
. Ma prima devi creare una stringa usando la funzione CONCAT():
CONCAT(exam_year, ' ', exam_month, ' ', exam_day)
Il CONCAT()
La funzione combina tutti gli argomenti in una stringa. Non è necessario trasmettere numeri alle stringhe. Dal momento che desideri ottenere una stringa in 'Year Month Day
', gli argomenti sono exam_year
, exam_month
, exam_day
, e gli spazi tra di loro.
Quindi, devi convertire questa stringa in una data utilizzando STR_TO_DATE(date_string, '%Y %M %d')
funzione. Il secondo argomento di questa funzione è il formato della data. %Y
sta per anno, %M
sta per mese (il suo nome completo, non un numero) e %d
sta per giorno.
STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d')
Usalo con un ORDER BY
clausola per ordinare le righe in ordine crescente per data. Se desideri visualizzare le righe in ordine decrescente, aggiungi semplicemente un DESC
parola chiave, come questa:
SELECT * FROM exam ORDER BY STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d') DESC;