SQL – Calculating number of days in a month
Here is a little function which I found myself using a number of times (particularly to calculate averages over the length of a specific month) which calculates number of days in any given month. All you need to do, is to provider it with a datetime input parameter to return number of days as an integer.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[fun_GetDaysInMonth] (@pDate DATETIME )
RETURNS INT
AS
BEGIN
RETURN CASE WHEN MONTH(@pDate) IN (1, 3, 5, 7, 8, 10, 12) THEN 31
WHEN MONTH(@pDate) IN (4, 6, 9, 11) THEN 30
ELSE CASE WHEN (YEAR(@pDate) % 4 = 0 AND
YEAR(@pDate) % 100 != 0) OR
(YEAR(@pDate) % 400 = 0)
THEN 29
ELSE 28
END
END
END
GO
And here is the SQL code and results from the actual implementation. All we need to do is call the function, here using ‘GETDATE()’ as an input parameter and repeating it a few times using ‘DATEADD’ function to generate few more months in a row.
------------------------------------------------------------------------ -- DAYS IN JANUARY 2012 | ------------------------------------------------------------------------ SELECT convert (nvarchar (10), datename(month,'2012/01/01')) + ' ' + convert (nvarchar (10), datepart(year,'2012/01/01')) as [Month/Year], dbo.fun_GetDaysInMonth (GETDATE()) as Number_of_Days; ------------------------------------------------------------------------ -- DAYS IN FEBRUARY 2012 | ------------------------------------------------------------------------ SELECT convert (nvarchar (10), datename(month,'2012/02/01')) + ' ' + convert (nvarchar (10), datepart(year,'2012/02/01')) as [Month/Year], dbo.fun_GetDaysInMonth (dateadd(month,1,GETDATE())) as Number_of_Days; ------------------------------------------------------------------------ -- DAYS IN MARCH 2012 | ------------------------------------------------------------------------ SELECT convert (nvarchar (10), datename(month,'2012/03/01')) + ' ' + convert (nvarchar (10), datepart(year,'2012/03/01')) as [Month/Year], dbo.fun_GetDaysInMonth (dateadd(month,2,GETDATE())) as Number_of_Days; ------------------------------------------------------------------------ -- DAYS IN APRIL 2012 | ------------------------------------------------------------------------ SELECT convert (nvarchar (10), datename(month,'2012/04/01')) + ' ' + convert (nvarchar (10), datepart(year,'2012/04/01')) as [Month/Year], dbo.fun_GetDaysInMonth (dateadd(month,3,GETDATE())) as Number_of_Days; GOhttp://scuttle.org/bookmarks.php/pass?action=add
This entry was posted on Friday, January 6th, 2012 at 1:18 pm and is filed under SQL. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.




Never thought Polybase could be used in this capacity and don't think Microsoft advertised this feature (off-loading DB data as…