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 |
---|---|
Mathématiques | 2019-12-19 |
Sciences | 2020-01-05 |
Santé | 2020-01-05 |
Anglais | 2020-01-08 |
Art | NULL |
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 date la plus ancienne est affichée en premier, la date la plus récente 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 PostgreSQL et dans Oracle, NULL
s sont affichés en dernier lors d'un tri par ordre croissant et en premier 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
seconde et Health
troisième, ou Santé deuxième et Science
troisiè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 exam_year, EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')), exam_day;
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 |
---|---|---|---|
Mathématiques | 2019 | Décembre | 19 |
Santé | 2020 | Janvier | 5 |
Sciences | 2020 | Janvier | 5 |
Anglais | 2020 | Janvier | 8 |
Art | NULL | NULL | NULL |
Discussion :
Vous devez ordonner les lignes par trois valeurs :l'année, le mois et le jour, mais pour avoir le bon ordre, vous devez convertir le mois en un nombre ('January
' à 1
, 'February
' à 2
, etc.). Sinon, vous verriez 'December
' avant 'January
'. La fonction TO_DATE(exam_month, 'Month') convertit le nom complet du mois en une date dans le '0001-MM-01
'. Par exemple, vous obtenez '0001-12-01
' pour décembre.
Vous pouvez maintenant utiliser la fonction EXTRACT(MONTH FROM date) pour extraire le mois de cette valeur de date. Le mois sera renvoyé sous forme de nombre.
En combinant ces deux fonctions, vous pouvez obtenir le mois sous forme de nombre en utilisant la formule suivante :
EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month'))
Pour trier les lignes par date, vous devez trier par année, mois et jour (dans cet ordre). Si vous souhaitez voir le dernier examen en premier, vous devrez trier par ordre décroissant. Pour ce faire, vous devez utiliser un DESC
mot-clé après chaque colonne dans le ORDER BY
clause.
SELECT * FROM exam ORDER BY exam_year DESC, EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')) DESC, exam_day DESC;