SQL - 查找2个日期之间的工作时间,不包括周末

时间:2013-08-28 16:47:10

标签: sql-server

我正在制定一个代码,以便在周末(周六和周日)之外获得净工作日。我需要几天的数据。我已经为它编写了以下两个函数

第一个函数返回日期的开始时间

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)

请帮忙。

1 个答案:

答案 0 :(得分:0)

你的功能在这种特殊情况下不起作用,因为9月1日是一个周末,你已经表明如果是这样的话,应该从结果中减去1。

在一般情况下,它不起作用,因为会有越来越多的特殊和边缘情况需要更复杂的逻辑。

创建工作日表是一种更灵活的解决方案