获取SQL两个日期间的周末数(Get number of weekends between two

2019-08-17 15:16发布

我需要获得周末日期之间的SQL中的功能。 我曾尝试但在逻辑的地方卡住了。

CREATE FUNCTION fnc_NumberOfWeekEnds(@dFrom DATETIME, @dTo   DATETIME)

RETURNS INT AS

BEGIN

   Declare @weekends int

   Set @weekends = 0

   While @dFrom <= @dTo Begin

      If ((datepart(dw, @dFrom) = 1))    

                  Set @weekends = @weekends + 1

                  Set @dFrom = DateAdd(d, 1, @dFrom)

   End

   Return (@weekends)

END

Answer 1:

尝试用这种替代if语句:

If ((datepart(dw, @dFrom) = 1) OR (datepart(dw, @dFrom) = 7))    

您也应该检查周末得到结果。



Answer 2:

我尝试了几个边缘情况下,这种逻辑似乎工作。

SELECT DATEDIFF(d, @dFrom, @dTo)/7+1
    + CASE WHEN DATEPART(dw,@dFrom) IN (1,7) THEN -1 ELSE 0 END
    + CASE WHEN DATEPART(dw,@dTo) IN (1,7) THEN -1 ELSE 0 END

您可以根据您希望如何处理的情况下开始或结束日期是在一个周末更改CASE语句。 在我的情况,我不包括周末如果开始或结束日期是周六或周日。



Answer 3:

使用下面的逻辑来计算没有星期六或星期日的开始日期和结束日期之间。

CREATE FUNCTION dbo.WEEKEND_COUNT
(
@Start_Date datetime,
@End_Date datetime
)
RETURNS int   
AS   
BEGIN
    Declare @count int = 0;
    while @Start_Date<=@End_Date
        Begin
        IF DatePart(WEEKDAY,@Start_Date) =  1 or DatePart(WEEKDAY,@Start_Date) =  7
        SET @count=@count+1
        SET @Start_Date=DateAdd(d,1,@Start_Date)
        END

return @count 
END

--use下面让周六和周日的计数

Select dbo.WEEKEND_COUNT('Your start date','your end date')


Answer 4:

这会给你周日的两个日期之间的数

SELECT DateDiff(ww, @dFrom, @dTo) as NumOfSundays


文章来源: Get number of weekends between two dates in SQL