Count work days between two dates

前端 未结 24 3223
失恋的感觉
失恋的感觉 2020-11-22 01:05

How can I calculate the number of work days between two dates in SQL Server?

Monday to Friday and it must be T-SQL.

24条回答
  •  天命终不由人
    2020-11-22 01:36

    For difference between dates including holidays I went this way:

    1) Table with Holidays:

        CREATE TABLE [dbo].[Holiday](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](50) NULL,
    [Date] [datetime] NOT NULL)
    

    2) I had my plannings Table like this and wanted to fill column Work_Days which was empty:

        CREATE TABLE [dbo].[Plan_Phase](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Id_Plan] [int] NOT NULL,
    [Id_Phase] [int] NOT NULL,
    [Start_Date] [datetime] NULL,
    [End_Date] [datetime] NULL,
    [Work_Days] [int] NULL)
    

    3) So in order to get "Work_Days" to later fill in my column just had to:

    SELECT Start_Date, End_Date,
     (DATEDIFF(dd, Start_Date, End_Date) + 1)
    -(DATEDIFF(wk, Start_Date, End_Date) * 2)
    -(SELECT COUNT(*) From Holiday Where Date  >= Start_Date AND Date <= End_Date)
    -(CASE WHEN DATENAME(dw, Start_Date) = 'Sunday' THEN 1 ELSE 0 END)
    -(CASE WHEN DATENAME(dw, End_Date) = 'Saturday' THEN 1 ELSE 0 END)
    -(CASE WHEN (SELECT COUNT(*) From Holiday Where Start_Date  = Date) > 0 THEN 1 ELSE 0 END)
    -(CASE WHEN (SELECT COUNT(*) From Holiday Where End_Date  = Date) > 0 THEN 1 ELSE 0 END) AS Work_Days
    from Plan_Phase
    

    Hope that I could help.

    Cheers

提交回复
热议问题