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

Comment obtenir le dernier jour du mois dans T-SQL

Problème :

Vous souhaitez trouver le dernier jour du mois pour une date spécifique dans T-SQL.

Exemple :

Notre base de données contient une table nommée Furniture avec des données dans les colonnes Id , Name , et PurchaseDate .

Identifiant Nom Date d'achat
1 canapé 2019-02-10
2 bureau 2019-04-01
3 bibliothèque 2019-05-20

Obtenons les noms et dates d'achat des produits et le dernier jour du mois où ces articles ont été achetés.

Solution :

Nous utiliserons la fonction EOMONTH() pour trouver le dernier jour du mois.

SELECT Name,
	 PurchaseDate,
	 EOMONTH(PurchaseDate) AS LastDayDate
FROM Furniture;

Voici le résultat de la requête :

Nom Date d'achat DateJourDernier
canapé 2019-02-10 2019-02-28
bureau 2019-04-01 2019-04-30
bibliothèque 2019-05-20 2019-05-31

Discussion :

Si vous souhaitez obtenir la date contenant le dernier jour du mois d'une date donnée, utilisez la fonction EOMONTH(). Cette fonction prend un argument obligatoire :une date (ou date et heure), qui peut être une colonne date/datetime ou une expression qui renvoie une date. (Dans notre exemple, nous utilisons le PurchaseDate colonne.)

EOMONTH() renvoie le dernier jour du même mois comme argument. La requête ci-dessus pour le canapé avec la date d'achat "2019-02-10" renvoie "2019-02-28" ; en février 2019, le dernier jour du mois était le 28.

Si vous souhaitez renvoyer le dernier jour du deuxième, troisième, etc. mois à partir d'une date donnée, utilisez le deuxième argument facultatif de EOMONTH() :le nombre de mois à ajouter. Regardez l'exemple :

SELECT Name,
	 PurchaseDate,
	 EOMONTH(PurchaseDate,1) AS LastDayDate
FROM Furniture;

Voici le résultat de la requête :

Nom Date d'achat DateJourDernier
canapé 2019-02 -10 2019-03 -30
bureau 2019-04 -01 2019-05 -31
bibliothèque 2019-05 -20 2019-06 -30

Pour le canapé avec la date d'achat "2019-02-10", cette requête renvoie "2019-03-30" - le dernier jour du suivant mois. Nous avons ajouté un mois à la fin du mois en cours.

Si vous souhaitez trouver le dernier jour du mois avant un mois donné, utilisez une valeur négative (par exemple "-1") comme deuxième argument :

SELECT Name,
	 PurchaseDate,
	 EOMONTH(PurchaseDate,-1) AS LastDayDate
FROM Furniture;

Voici le résultat de la requête :

Nom Date d'achat DateJourDernier
canapé 2019-02 -10 2019-01 -31
bureau 2019-04 -01 2019-03 -31
bibliothèque 2019-05 -20 2019-04 -30