2010-08-05 89 views
1

下面的代碼已經從另一篇文章創建,但我現在有一個單獨的問題。這段代碼所做的基本上是使用2個日期,並從中減去週末以獲取從開始到結束時間(不包括週末)以分鐘爲單位的總時間。我現在試圖說,因爲對我來說,在一個工作日裏有11個小時,我只想每天計算11個小時。是我得到的結果如下(我加列名只是讓你知道它們是什麼):SQL日期到時間到分鐘減去工作日..... confused

@AllMins @MinDays 
2173   1.50902777777778 

由於在一個工作日內660分鐘或780分鐘在一天的工作,我需要不工作從總時間中減去此值。所以,1天將是2173-780,但我也需要在一天中獲得.50902777777778分鐘。有什麼建議麼?

DECLARE @StartDate DATETIME 
DECLARE @EndDate DATETIME 
SET @StartDate = '2010-08-02 00:00:00.000' 
SET @EndDate = '2010-08-03 12:13:12.123' 

--How many minutes are between order start and end time including non working time 
DECLARE @AllMins INT 
--Declares how many minutes are in a day and makes it float to get remainder minutes when divided 
DECLARE @MinsInDay FLOAT 
SET @MinsInDay = 1440 

--Finds how many minutes are between start and end time excluding weekends and assignes to variable 
SET @AllMins = ((DATEDIFF(mi, @StartDate, @EndDate)) 
    -(((DATEDIFF(wk, @StartDate, @EndDate) * 2) * 24) * 60) 
    -(((CASE WHEN DATENAME(dw, @StartDate) = 'Sunday' THEN 1 ELSE 0 END) * 24) * 60) 
    -(((CASE WHEN DATENAME(dw, @EndDate) = 'Saturday' THEN 1 ELSE 0 END) * 24) * 60)) 

--Calculates how many days have elapsed in the minutes that the order has taken 
DECLARE @MinDays FLOAT 
SET @MinDays = (@AllMins/@MinsInDay) 

SELECT 
@AllMins 
,@MinDays 

回答

2

您是否在尋找

@AllMins - (integer portion of (@MinDays) * 780) - (fractional portion of (@MinDays) * 360) 

,讓你從小數部分減去780分鐘的部分?

+0

嗯問題是我只想從上午6點到下午5點只計算時間,並且沒有線索可以從這裏開始...... – user380432 2010-08-05 20:06:04

+0

好吧,所以每天的小數部分在午夜開始,所以你我們希望排除午夜至6點之間的6小時(360分鐘)。我修改了我的答案以反映這一點。把這與你的另一個關於拆分數字的小數部分的問題結合起來,你應該在路上。 – 2010-08-05 20:26:45