Database
 sql >> Base de données >  >> RDS >> Database

Comment commander par date dans T-SQL

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;