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 ?
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 ?
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
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
Mais pas pour une date donnée comme le souhaitait l'OP... c'est-à-dire 1/31/2009 rendements 28
C'est vrai, mais il est très facile de contourner ce problème en ajoutant DAY(@date)-1
à la date.
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
--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 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.