我需要在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
答案 0 :(得分:2)
尝试用以下代码替换if语句:
If ((datepart(dw, @dFrom) = 1) OR (datepart(dw, @dFrom) = 7))
您还应该检查一周的结尾以获得结果。
答案 1 :(得分:1)
我用几个边缘情况尝试了这个逻辑,它似乎有效。
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语句。在我的情况下,如果开始或结束日期是星期六或星期日,我不包括周末。
答案 2 :(得分:1)
DECLARE @date_from DATETIME,
@date_to DATETIME
/*TEMPORARY TABLE*/
DECLARE @DATES AS TABLE (
GDate DATETIME
)
SELECT @date_from ='2019-09-10'
SELECT @date_to ='2019-10-10'
/*DATE GENERATED*/
WITH dates
AS (
SELECT @date_from AS dt
UNION ALL
SELECT DATEADD(D, 1, dt)
FROM dates
WHERE dt < @date_to
)
/*INSERTED DATES INTO TEMP TABLE */
INSERT INTO @DATES
SELECT CONVERT(DATETIME, dt) AS Gdate FROM dates
/*Get Records from temp table*/
SELECT Gdate FROM @DATES
答案 3 :(得分:0)
在逻辑下方用于计算开始日期和结束日期之间的星期六或星期日的数量。
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
- 使用以下方式获取星期六和星期日的计数
Select dbo.WEEKEND_COUNT('Your start date','your end date')
答案 4 :(得分:-1)
这将为您提供两个日期之间的星期日数
SELECT DateDiff(ww, @dFrom, @dTo) as NumOfSundays