-1

週末(土曜日と日曜日)を除く正味営業日を取得するコードに取り組んでいます。このデータは数日で必要です。私はそれのために次の2つの関数を書きました

最初の関数は日付の開始時刻を返します

ALTER FUNCTION day_start
   (@dd as datetime)
   returns datetime
   begin
     return cast(floor(cast(@dd as float)) as datetime)
   end

2番目のものは実際の作業を行います

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 に答える