SQLUSA.com
SQL SERVER 2008 GRAND SLAM
FREE TRIAL  CLICK HERE TO ORDER  SEARCH
SQL JOBS SQL Server Training Scripts JOB BANK
  SQL Server 2008 Training Scripts  
  SQL Server 2005 Training Scripts  
News SQL Server Articles SQL Format

How to calculate the workdays in a period?

Execute the following Microsoft SQL Server Transact-SQL (T-SQL) script in Management Studio (SSMS) Query Editor, SQLCMD or other client software to create a Holiday table and a scalar function for workdays calculation and test it.

USE AdventureWorks

GO

 

CREATE TABLE dbo.Holiday (

  CountryCode   CHAR(2)    NOT NULL,

  [HolidayDate] [SMALLDATETIME]    NOT NULL,

  CONSTRAINT [PK_holidayDate] PRIMARY KEY

                              CLUSTERED ( [CountryCode],[HolidayDate] ))

GO

 

INSERT dbo.Holiday

VALUES('US','2008-01-01')

 

INSERT dbo.Holiday

VALUES('US','2008-02-18')

 

INSERT dbo.Holiday

VALUES('US','2008-05-26')

 

INSERT dbo.Holiday

VALUES('US','2008-07-04')

 

INSERT dbo.Holiday

VALUES('US','2008-09-01')

 

INSERT dbo.Holiday

VALUES('US','2008-10-13')

 

INSERT dbo.Holiday

VALUES('US','2008-11-27')

 

INSERT dbo.Holiday

VALUES('US','2008-12-25')

 

GO

-- UDF - Scalar-valued

CREATE FUNCTION fnWorkDays

               (@StartDate DATETIME,

                @EndDate   DATETIME)

RETURNS INT

AS

  BEGIN

    RETURN

      (SELECT (DATEDIFF(dd,@StartDate,@EndDate) + 1) -

              (DATEDIFF(wk,@StartDate,@EndDate) * 2) -

              (CASE

                       WHEN DATENAME(dw,@EndDate) = 'Saturday' THEN 1

                       ELSE 0

                       END) - (CASE

                               WHEN DATENAME(dw,@StartDate) = 'Sunday' THEN 1

                               ELSE 0 END) - COUNT(* )

       FROM   dbo.Holiday

       WHERE  HolidayDate BETWEEN @StartDate AND @EndDate)

  END

 

GO

 

DECLARE  @StartDate DATETIME,

         @EndDate   DATETIME

SET @StartDate = getdate() - 200

SET @EndDate = getdate() - 100

 

SELECT WorkDays = dbo.fnWorkDays(@StartDate,@EndDate)

GO

/* WorkDays

   71  */

 

DECLARE  @StartDate DATETIME,

         @EndDate   DATETIME

SET @StartDate = getdate() + 100

SET @EndDate = getdate() + 400

 

SELECT WorkDays = dbo.fnWorkDays(@StartDate,@EndDate)

GO

/* WorkDays

   215  */

Related article:

How do I determine a public holiday in Sql server?

 

Order SQL 2008 GRAND SLAM Today!
SQLUSA.com Home Page
SQL Server Training at www.sqlusa.com.
SQL Server 2008 Video Training at www.sqlusa.com.
SQL Server 2005 Training Videos at www.sqlusa.com.
Microsoft SQL Server 2000 Training Videos at www.sqlusa.com.

FREE SQL & Business Intelligence / OLAP Short Videos on YOUTUBE.com

Microsoft Community Contributor 2011
Invest in Your SUCCESS!

Search SQLUSA FREE SQL Server Articles & FREE T-SQL Scripts


Copyright 2005-2011, SMI Corp. All Rights Reserved.

SQL Server 2012 is a program product of Microsoft Corporation.
SQL Server 2008 is a program product of Microsoft Corporation.
SQL Server 2005 is a program product of Microsoft Corporation.
SQL Server 2000 is a program product of Microsoft Corporation.