DECLARE @totaldays INT,
@weekenddays INT,
@startDate datetime = '2023/01/01',
@endDate datetime = '2023/01/08'
SET @totaldays = DATEDIFF(DAY, @startDate, @endDate) +1
SET @weekenddays = ((DATEDIFF(WEEK, @startDate, @endDate) * 2) +
CASE
WHEN DATEPART(WEEKDAY, @startDate) = 1
THEN 1
ELSE 0
END +
CASE
WHEN DATEPART(WEEKDAY, @endDate) = 6
THEN 1
ELSE 0
END)
SELECT (@totaldays - @weekenddays) AS Days
我用这个代码来查找2个日期的datediff
,不包括'Sunday'。
结果是5,但它应该是6。
如果@startDate datetime = '2023/01/01', @endDate datetime = '2023/01/07'结果= 6,答案为正确。如何使它成为正确的查询?
这可能是有可能使这个CASE WHEN
结构正确运行,但在我看来,这是真的不好读。我会这样做:
DECLARE @startdate datetime
DECLARE @enddate datetime
DECLARE @count int
SET @count = 0
SET @startdate = '2023/01/01'
SET @enddate = '2023/01/08'
WHILE @startdate <= @enddate
BEGIN
IF DATEPART(WEEKDAY,@startdate) <> 1
SET @count = @count + 1
SET @startdate = DATEADD(d,1,@startdate)
END
SELECT @count AS Days;
这个简单的想法是使用一个计数器,只有当这一天不是星期天时,它才会加1。
试试这里:db<>fiddle
你可以试试这个吗:
我对你的查询做了一些小调整
DECLARE @totaldays INT,
@weekenddays INT,
@startDate datetime = '2023/01/01',
@endDate datetime = '2023/01/08'
SET @totaldays = DATEDIFF(DAY, @startDate, @endDate) +1
SET @weekenddays = (select datediff(day,@startDate,@endDate) /7 +
case
when datepart(WEEKDAY,@startDate) = 1 then 1
when datepart(WEEKDAY,@startDate) > datepart(Weekday,@endDate) then 1
else 0
end)
SELECT (@totaldays - @weekenddays) AS Days
你可以从这里试试:https://dbfiddle.uk/vBYoOWW6