在迪拜,标准周末从周五到周六,而不是传统的周六/周日。
我正在计算两个给定日期之间的工作天数,这是我的代码;
DATEDIFF(dd, DATEADD(hour, DATEDIFF(hh, getdate(), getutcdate()), @StartDate),
DATEADD(hour, DATEDIFF(hh, getdate(), getutcdate()), @EndDate)+1)
-
(
(DATEDIFF(wk, @StartDate, @EndDate) * 2
+(CASE WHEN DATENAME(dw, @StartDate) = 'Saturday' then 1 else 0 end)
+(CASE WHEN DATENAME(dw, @EndDate) = 'Friday' then 1 else 0 end)
))
)
然而,它正在计算错误的天数。例如; 如果开始日期 02-03-2016 且结束日期 02-06-2016 ,则返回 4 ,但应该是 2。
如果开始日期 02-03-2016 且结束日期 02-07-2016 ,则结果为 3 ,这是正确的。
答案 0 :(得分:0)
下面的代码会正确计算您的示例中的工作日。如果需要,可以将其包装在标量函数中。
declare @from date, @to date;
set @from = '2016-02-03';
set @to = '2016-02-06';
with dates(date)
as
(
select @from
union all
select dateadd(dd, 1, [date])
from dates
where [date] < @to
)
select count(*) [working days]
from (
select date, case when datename(dw, [date]) in ('Friday', 'Saturday') then 0 else 1 end as working
from dates) as dt
where dt.working = 1