Sql server 获取两天之间的天数总和(不包括星期日)

Sql server 获取两天之间的天数总和(不包括星期日),sql-server,Sql Server,我有一个用于存储员工休假信息的表,其中包含以下字段:LeaveID、EmployeeID、NoOfDays、StartDate、EndDate和Status。我使用下面的查询来计算两个日期之间的总天数 问题是,如果在两个日期之间有一个星期天,那么这一天也是一天,我不打算这样。同样,如果一名员工在1月29日和2月2日之间申请休假,即5天,我分别选择1月1日至31日作为我的@startdate和@enddate,那么我得到的是零,而不是3天(29,30,31) 我需要你们的帮助,伙计们,我还是SQL

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

问题是,如果在两个日期之间有一个星期天,那么这一天也是一天,我不打算这样。同样,如果一名员工在1月29日和2月2日之间申请休假,即5天,我分别选择1月1日至31日作为我的@startdate和@enddate,那么我得到的是零,而不是3天(29,30,31)

我需要你们的帮助,伙计们,我还是SQL server的新手

SELECT COALESCE(SUM(NoOfDays), 0) AS SumOfDays
FROM LeaveApplications
WHERE StartDate>=@startdate
  AND EndDate <=@enddate
选择合并(SUM(NoOfDays),0)作为SumOfDays
离开申请
其中StartDate>=@StartDate

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

注意:不确定是否有任何预定义的函数

   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'
创建过程GetDays(@Date1日期,@Date2日期)
作为
开始
将@Length声明为Int=0
--获取要迭代的总天数
设置@Length=DateDiff(天、@Date1、@Date2)
将@i声明为Int=1
将@CountDays声明为Int=0
而(@i