-1

我正在编写代码以获取不包括周末(周六和周日)的净工作日。我需要这些数据在几天内。我已经为它编写了以下 2 个函数

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

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,结束时间 - 2012 年 9 月 1 日上午 7:14:00,预期结果 - 0.911111111,代码输出 - (-0.08888888)

请帮忙。

4

1 回答 1

0

您的函数在这种特定情况下不起作用,因为 9 月 1 日是周末,如果是这种情况,您已经指出应该从结果中减去 1。

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

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

于 2013-08-29T07:43:06.813 回答