这比看起来更难。我需要一个函数来计算日期范围内给定工作日的数字。我不需要任何循环或递归 SQL。有数以百万计的例子就是这样做的。我需要一个快速的计算函数。
函数的输入将是工作日、起始日期、今日
-- counting fridays
set datefirst 1
SELECT dbo.f_countweekdays(5, '2011-07-01', '2011-07-31'),
dbo.f_countweekdays(5, '2011-07-08', '2011-07-15'),
dbo.f_countweekdays(5, '2011-07-09', '2011-07-15'),
dbo.f_countweekdays(5, '2011-07-09', '2011-07-14')
预期结果:
5, 2, 1, 0
create function dbo.f_countweekdays
(
@DOW int,
@StartDate datetime,
@EndDate datetime
)
returns int
begin
return
( select datediff(wk, T2.St, T2.En) -
case when T1.SDOW > @DOW then 1 else 0 end -
case when T1.EDOW < @DOW then 1 else 0 end
from (select datepart(dw, @StartDate),
datepart(dw, @EndDate)) as T1(SDOW, EDOW)
cross apply (select dateadd(d, - T1.SDOW, @StartDate),
dateadd(d, 7 - T1.EDOW, @EndDate)) as T2(St, En))
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)