2016-03-08 15:28:00
This script creates a dbo.Holiday
table and a scalar function designed to return the number of business days between two dates.
-- Create the Holiday Table is not present. IF NOT EXISTS ( SELECT 1 FROM sys.Objects WHERE Name = 'Holiday') BEGIN CREATE TABLE dbo.Holiday ( Id INT NOT NULL, [Date] DATETIME NOT NULL, Description NVARCHAR(50) NOT NULL ) ON [PRIMARY] END GO --DELETE the existing script. IF EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'dbo.f_CountBusinessDaysBetweenDates')) DROP PROCEDURE dbo.f_CountBusinessDaysBetweenDates GO CREATE FUNCTION [dbo].[f_CountBusinessDaysBetweenDates] (@StartDate DATETIME, @EndDate DATETIME) RETURNS INT AS BEGIN DECLARE @Days INT-- Get total working days (all days excluding Saturday and Sunday) SELECT @Days = DATEDIFF(day, @StartDate, @EndDate ) _p_l_u_s_ 1 - ( 2 * DATEDIFF( week, @StartDate, @EndDate ) ) _p_l_u_s_ CASE WHEN DATENAME( dw, @StartDate) = 'Saturday' THEN 1 ELSE 0 END - CASE WHEN DATENAME( dw, @EndDate) = 'Saturday' THEN 1 ELSE 0 END-- Remove the holiday days SELECT @Days = @Days - COUNT(*) FROM Holiday WHERE [Date] BETWEEN @StartDate _p_l_u_s_ 1 AND @EndDate-- Return results return @Days END GO