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.