我正在制定一个代码,以便在周末(周六和周日)之外获得净工作日。我需要几天的数据。我已经为它编写了以下两个函数
第一个函数返回日期的开始时间
ALTER FUNCTION day_start
(@dd as datetime)
returns datetime
begin
return cast(floor(cast(@dd as float)) as datetime)
end
第二个做实际工作
alter function networkingdays_hours (@startdate as datetime, @enddate as datetime)
returns float
begin
return
(
SELECT
cast(
(DATEDIFF(dd,@StartDate, @EndDate))
-(DATEDIFF(wk,@StartDate, @EndDate)*2)
-(CASE WHEN DATENAME(dw, @StartDate) ='Sunday'
THEN 1
ELSE 0
END)
-(CASE WHEN DATENAME(dw, @EndDate) ='Saturday'
THEN 1
ELSE 0
END)
+(@EndDate - dbo.day_start(@EndDate))
-(@startdate - dbo.day_start(@startdate))
as float))
END
实施例 开始时间 - 2012年8月31日上午9:22:00,结束时间 - 9/1/2012 7:14:00 AM,预期结果 - 0.911111111,代码输出 - (-0.08888888)
请帮忙。
答案 0 :(得分:0)
你的功能在这种特殊情况下不起作用,因为9月1日是一个周末,你已经表明如果是这样的话,应该从结果中减去1。
在一般情况下,它不起作用,因为会有越来越多的特殊和边缘情况需要更复杂的逻辑。
创建工作日表是一种更灵活的解决方案