111 votes

Comment déterminer le nombre de jours d'un mois dans le serveur SQL ?

Je dois déterminer le nombre de jours d'un mois pour une date donnée dans SQL Server.

Existe-t-il une fonction intégrée ? Si ce n'est pas le cas, que dois-je utiliser comme fonction définie par l'utilisateur ?

177voto

Mikael Eriksson Points 77190

Dans SQL Server 2012, vous pouvez utiliser EOMONTH (Transact-SQL) pour obtenir le dernier jour du mois et ensuite vous pouvez utiliser JOUR (Transact-SQL) pour obtenir le nombre de jours du mois.

DECLARE @ADate DATETIME

SET @ADate = GETDATE()

SELECT DAY(EOMONTH(@ADate)) AS DaysInMonth

1 votes

Et si vous avez besoin du nombre de jours d'une donnée, vous pouvez également utiliser la méthode DATEFROMPARTS. Le code ci-dessus deviendrait SELECT DAY(EOMONTH(DATEFROMPARTS(@year, @month, 1))) AS JoursDuMois

0 votes

La beauté de cette solution entre en jeu si @ADate est une valeur calculée complexe ! +1

0 votes

Merci beaucoup !

121voto

Mehrdad Afshari Points 204872

Vous pouvez utiliser la formule suivante avec le premier jour du mois spécifié :

datediff(day, @date, dateadd(month, 1, @date))

Pour que ça marche pour chaque rendez-vous :

datediff(day, dateadd(day, 1-day(@date), @date),
              dateadd(month, 1, dateadd(day, 1-day(@date), @date)))

2 votes

Comme le dit Stan, cela donnera des résultats inexacts dans certains cas.

0 votes

Mais pas pour une date donnée comme le souhaitait l'OP... c'est-à-dire 1/31/2009 rendements 28

0 votes

C'est vrai, mais il est très facile de contourner ce problème en ajoutant DAY(@date)-1 à la date.

29voto

Daniel Davis Points 101

La solution la plus élégante : fonctionne pour tout @DATE

DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,@DATE),0)))

Mettez-le dans une fonction ou utilisez-le simplement en ligne. Cela répond à la question originale sans tout le superflu des autres réponses.

des exemples de dates provenant d'autres réponses :

SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'1/31/2009'),0))) Retours 31

SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'2404-feb-15'),0))) Retours 29

SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'2011-12-22'),0))) Retours 31

26voto

Javier Points 49

Beaucoup plus simple...essayez day(eomonth(@Date))

1 votes

Je pense que votre réponse est la meilleure, tellement simple. Merci !

12voto

Brimstedt Points 1507
--Last Day of Previous Month
SELECT DATEPART(day, DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)))

--Last Day of Current Month
SELECT DATEPART(day, DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0)))

--Last Day of Next Month
SELECT DATEPART(day, DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+2,0)))

Personnellement, je ferais un UDF pour cela s'il n'y a pas une fonction intégrée...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X