Tuesday, August 13, 2013

Calculating number of Weekdays

Calculating number of Weekdays


In this article there is a simple SQL statement that shows the number of week days between two supplied dates.
You can make it a function and supply 3 parameters like starts date, end dates and Number of Holiday. If you have a holiday list (or you know the number of holiday in years) you can calculates the total number of working dates in a year. 
Here in this example I am taking 0 holidays.
I am trying to make it a function, which you can directly use.

IF OBJECT_ID (N'dbo.Ifn_WeekDays',N'FN') IS NOT NULL
    DROP FUNCTION dbo.fn_WeekDays
GO
-- Function
CREATE FUNCTION dbo.fn_WeekDays
(    
      @param_StartDate   DATETIME,
      @param_EndtDate    DATETIME,
      @param_NoofHoliday INT = 0
)
RETURNS  INT
AS
BEGIN
      DECLARE  @start    As DateTime,
               @end      As DateTime,
               @holidy   As Int,
               @v_Retval As Int
            
      SET @start=CONVERT(datetime, @param_StartDate)
      SET @end  =CONVERT(datetime, @param_EndtDate)
      SET @holidy=@param_NoofHoliday

      SELECT @v_Retval =DATEDIFF(d,@start,@end)+1
               - (DATEDIFF(wk,@start,@end) + CASE WHENDATEPART(dw,@start)=1            
                                                 THEN 1 ELSE 0 END )
               - (DATEDIFF(wk,@start,@end) + CASE WHENDATEPART(dw,@end)=7
                                                 THEN 1 ELSE 0 END )-@holidy
            
      RETURN(@v_Retval)  
END

GO

-- Function execution
SET DATEFORMAT DMY

SELECT dbo.fn_WeekDays(CONVERT(DATETIME, '01-03-2012'),
                       CONVERT(DATETIME, '31-03-2012'),
                       0) AS [No of Week Days]


Hope you like it.