Problème :
Vous souhaitez trier les lignes par date.
Exemple 1 :
L'exam
le tableau a deux colonnes, subject
et exam_date
.
sujet | exam_date |
---|---|
Mathématiques | 2019-12-19 |
Anglais | 2020-01-08 |
Sciences | 2020-01-05 |
Santé | 2020-01-05 |
Art | NULL |
Vous souhaitez trier les lignes par exam_date
.
Solution :
SELECT * FROM exam ORDER BY exam_date;
Le résultat ressemble à ceci (les lignes sont triées par ordre croissant de exam_date
):
sujet | exam_date |
---|---|
Art | NULL |
Mathématiques | 2019-12-19 |
Sciences | 2020-01-05 |
Santé | 2020-01-05 |
Anglais | 2020-01-08 |
Discussion :
Utilisez le ORDER BY
mot-clé et le nom de la colonne par laquelle vous voulez trier. De cette façon, vous trierez les données dans l'ordre croissant de cette colonne. Vous pouvez également utiliser le ASC
mot-clé pour indiquer clairement que l'ordre est croissant (la première date est affichée en premier, la dernière date est affichée en dernier, etc.).
SELECT * FROM exam ORDER BY exam_date ASC;
Si vous souhaitez voir la date la plus récente en premier et la date la plus ancienne en dernier, vous devez trier par ordre décroissant. Utilisez le DESC
mot clé dans ce cas.
SELECT * FROM exam ORDER BY exam_date DESC;
Notez que dans MySQL, NULL
s sont affichés en premier lors d'un tri par ordre croissant et en dernier lors d'un tri par ordre décroissant. En outre, les lignes avec le même exam_date
sont affichés dans un ordre aléatoire (vous pouvez voir Science
troisième et Health
quatrième, ou Health
troisième et Science
quatrième).
Exemple 2 :
L'exam
table a les colonnes suivantes :subject
, exam_year
, exam_month
, et exam_day
. Les mois sont donnés en noms, pas en nombres.
sujet | année_examen | mois_examen | exam_day |
---|---|---|---|
Mathématiques | 2019 | Décembre | 19 |
Anglais | 2020 | Janvier | 8 |
Sciences | 2020 | Janvier | 5 |
Santé | 2020 | Janvier | 5 |
Art | NULL | NULL | NULL |
Vous souhaitez trier les lignes par date d'examen.
Solution :
SELECT * FROM exam ORDER BY STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d');
Le résultat ressemble à ceci (les lignes sont triées par ordre croissant de exam_year
, exam_month
, et exam_date
):
sujet | année_examen | mois_examen | exam_day |
---|---|---|---|
Art | NULL | NULL | NULL |
Mathématiques | 2019 | Décembre | 19 |
Santé | 2020 | Janvier | 5 |
Sciences | 2020 | Janvier | 5 |
Anglais | 2020 | Janvier | 8 |
Discussion :
Pour trier par date, créez des valeurs de date à partir des valeurs d'année, de mois et de jour. Pour ce faire, utilisez la fonction STR_TO_DATE(). Si vous avez une date stockée sous forme de chaîne dans le champ 'Year Month Day
', vous pouvez le convertir en une date en utilisant STR_TO_DATE(date_string, '%Y %M %d')
. Mais d'abord, vous devez créer une chaîne à l'aide de la fonction CONCAT() :
CONCAT(exam_year, ' ', exam_month, ' ', exam_day)
Le CONCAT()
La fonction combine tous les arguments en une seule chaîne. Vous n'avez pas besoin de convertir des nombres en chaînes. Puisque vous souhaitez obtenir une chaîne dans le 'Year Month Day
', les arguments sont exam_year
, exam_month
, exam_day
, et les espaces entre eux.
Ensuite, vous devez convertir cette chaîne en une date en utilisant le STR_TO_DATE(date_string, '%Y %M %d')
une fonction. Le deuxième argument de cette fonction est le format de date. %Y
représente l'année, %M
représente le mois (son nom complet, pas un nombre) et %d
signifie jour.
STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d')
Utilisez-le avec un ORDER BY
clause pour trier les lignes par ordre croissant de date. Si vous souhaitez voir les lignes dans l'ordre décroissant, ajoutez simplement un DESC
mot-clé, comme ceci :
SELECT * FROM exam ORDER BY STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d') DESC;