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 | Date de l'examen |
---|---|
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 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 SQLite, 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
seconde et Health
troisième, ou Health
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 |
Solution :
SELECT * FROM exam ORDER BY exam_year, (CASE exam_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END), exam_day;
Le résultat ressemble à ceci (les lignes sont triées par ordre croissant de exam_year
, exam_month
, et exam_day
):
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 les lignes par date d'examen, vous devez d'abord trier par année, puis par mois numérique (et non par nom de mois) et enfin par jour. Vous pouvez convertir les noms de mois en mois numériques avec un CASE WHEN
clause. Après le CASE
mot-clé, spécifiez le nom de la colonne. Ensuite, après chaque WHEN, indiquez la valeur dans cette colonne, utilisez le mot clé THEN et spécifiez la nouvelle valeur que vous souhaitez attribuer à la place de l'ancienne. Ici, la colonne est exam_month
, les valeurs actuelles de cette colonne sont 'January
', 'February
', …, 'December
', et les nouvelles valeurs sont les mois numériques 1
, 2
, …, 12
. Après avoir fini de convertir toutes les valeurs, n'oubliez pas d'utiliser le END
mot clé pour fermer le CASE WHEN
clause. Jetez un œil :
CASE exam_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END
C'est ainsi que vous convertissez un nom de mois en un numéro de mois. Vous pouvez l'utiliser pour trier les lignes par date, c'est-à-dire par année, mois numérique et jour.
ORDER BY exam_year, (CASE exam_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END), exam_day
De cette façon, vous pouvez trier les lignes par ordre croissant de date. Le NULL
s s'affichera en premier. Pour changer l'ordre en décroissant, utilisez le DESC
mot-clé après chaque colonne dans le ORDER BY
clause. Voici à quoi devrait ressembler l'ensemble de la requête :
SELECT * FROM exam ORDER BY exam_year DESC, (CASE exam_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END) DESC, exam_day DESC;
Notez que lors du tri par ordre décroissant dans SQLite, NULL
s sont affichés en dernier.