Problème :
Vous souhaitez trier les lignes par date.
Exemple 1 :
L'exam
le tableau a deux colonnes, subject
et exam_date
.
Sujet | Date de l'examen |
---|---|
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 ExamDate;
Le résultat ressemble à ceci (les lignes sont triées par ordre croissant par ExamDate
):
Sujet | Date de l'examen |
---|---|
Art | NULL |
Sciences | 2020-01-05 |
Santé | 2020-01-05 |
Anglais | 2020-01-08 |
Mathématiques | 2019-12-19 |
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 ExamDate 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 ExamDate DESC;
Notez que dans T-SQL, 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. Aussi, les lignes avec le même ExamDate
sont affichés dans un ordre non déterministe (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
. Le mois est donné par son nom et non par son numéro.
Sujet | Année de l'examen | MoisExamen | Jour d'examen |
---|---|---|---|
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 CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE);
Le résultat ressemble à ceci (les lignes sont triées par ordre croissant de ExamYear
, ExamMonth
, et ExamDate
):
Sujet | Année de l'examen | MoisExamen | Jour d'examen |
---|---|---|---|
Art | NULL | NULL | NULL |
Santé | 2020 | Janvier | 5 |
Sciences | 2020 | Janvier | 5 |
Anglais | 2020 | Janvier | 8 |
Mathématiques | 2019 | Décembre | 19 |
Discussion :
Pour regrouper 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 CAST(). Si vous avez une date stockée sous forme de chaîne dans le champ 'YYYY-Month-DD
', vous pouvez le convertir en une date en utilisant CAST(date_string AS date)
. Tout d'abord, vous devez créer une chaîne, en utilisant également la fonction CAST() :
CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2))
L'expression CAST(ExamYear AS VARCHAR(4))
crée une chaîne à partir du nombre stocké dans ExamYear
. L'expression CAST(ExamDay AS VARCHAR(2))
crée une chaîne à partir du nombre stocké dans ExamDay
. ExamMonth
est déjà une chaîne, il n'est donc pas nécessaire de la transtyper.
Ensuite, vous devez convertir cette chaîne en une date en utilisant le CAST(date_string AS date)
fonction :
CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE)
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 CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE) DESC;