我有一个表,用于存储员工的请假信息,其中包含以下字段: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
答案 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'