2013-08-28 73 views
-1

我正在制定一個代碼,以獲取除週末(週六和週日)以外的淨工作日。我需要這些數據。我已經寫了下面的2個功能爲它SQL - 查找兩個日期之間的工作時間(不包括週末)

第一個函數返回的日期

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 

例 開始時間的開始時間 - 8/31/2012 9:22:00 AM,End Time - 2012/9/1 7:14:00,預期結果 - 0.911111111,代碼輸出 - (-0.08888888)

請幫忙。

+1

那麼,如果數據表明他們完成他們開始之前,你能指望什麼? – podiluska

+0

對不起。我舉了一個不正確的例子。現在更新 – user2726212

+0

看起來有點像這個問題:http://stackoverflow.com/q/7444846/192510 – NealB

回答

0

你的函數在這個特定的情況下不起作用,因爲9月1日是一個週末,並且你已經指出如果是這樣的話,應該從結果中減去1。

在一般情況下,它不起作用,因爲會有越來越多的特殊和邊緣情況需要更復雜的邏輯。

創建工作日內表是一個更靈活的解決方案

相關問題