Mysql
 sql >> Database >  >> RDS >> Mysql

Come ordinare per data in MySQL

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;