获取两天之间的天数总和(星期日除外)

时间:2019-02-01 06:10:49

标签: sql-server

我有一个表,用于存储员工的请假信息,其中包含以下字段:LeaveID,EmployeeID,NoOfDays,StartDate,EndDate,Status。我使用下面的查询求和两个日期之间没有的总天数。

问题在于,如果两个日期之间有一个星期日,则它也等于一天,我不希望如此。另外,如果假设某位员工在1月29日至2月2日之间申请休假-这是5天-并且我分别选择1月1日至31日作为我的@startdate和@enddate,则我得到的总和为零,而不是3天(29,30 ,31st)。

在这里我需要您的帮助,对于SQL Server来说还是新手

SELECT COALESCE(SUM(NoOfDays), 0) AS SumOfDays
FROM LeaveApplications
WHERE StartDate>=@startdate
  AND EndDate <=@enddate

1 个答案:

答案 0 :(得分:1)

您可以使用存储过程来获取两天之间的天数,星期日除外!这个想法很简单,您必须每天遍历,如果不是星期日,则增加计数:

注意:不确定是否有任何预定义的功能!

   Create Procedure GetDays(@Date1 Date, @Date2 Date)
   AS 
   Begin
           Declare @Length As Int = 0
           -- get total number days to iterate
           Set @Length = DateDiff(Day, @Date1, @Date2)
           Declare @i As Int = 1
           Declare @CountDays AS Int = 0

           While (@i <= @Length)
           Begin
           -- get each day name
                Declare @Name As VarChar(15) = Format(@Date1, 'dddd')
                If(@Name != 'SUNDAY') -- increment count if it is not sunday
                     Set @CountDays = @CountDays+1
           -- increment day
                Set @Date1 = DateAdd(Day, 1, @Date1)
                Set @i = @i +1
           End
         Select @CountDays 'Total Days Excluding Sunday'
    End

 -- execute procedure
 Exec dbo.GetDays '2019-02-01', '2019-02-5'