2010-08-05 3 views
1

다음 코드는 다른 게시물에서 작성되었지만 이제는 별도의 문제가 있습니다. 이 코드는 기본적으로 2 개의 날짜를 가져와 주말을 빼고 주말을 제외한 시작부터 종료까지의 전체 시간을 분 단위로 표시합니다. 나는 나를 위해 일일 11 시간이 있기 때문에 지금 말하려고 애 쓰고있다. 나는 하루에 단지 11 시간 만 계산하고 싶다. 내가 얻을 결과는 (당신이 그들이 무엇인지 알겠지만 열 이름을 추가) 다음과 같습니다 : I가 필요한 작업 일에서 작동하지 않는 작업 일 660 분 7백80분날짜 - 시간 - 분 - 근무일 - 공휴일 ..... 혼동

@AllMins @MinDays 
2173   1.50902777777778 

있기 때문에 전체 시간에서 이것을 뺍니다. 따라서 1 일은 2173-780 일 것이지만 하루에 .50902777777778 분이 필요합니다. 어떤 제안? 당신이 소수 부분에서 780 분 부분을 뺀되도록

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) 

을 찾고 계십니까?

+0

글쎄 문제는 단지 오전 6 시부 터 오후 5 시까 지의 시간만을 계산하고 여기에서 갈 수있는 단서가 없다는 것입니다 .... – user380432

+0

OK, 하루의 분수 부분이 자정에 시작되므로 자정부터 오전 6 시까 지 6 시간 (360 분)을 제외하고 싶습니다. 이를 반영하기 위해 답을 수정했습니다. 숫자의 분수 부분을 나누는 것에 대한 다른 질문과 결합하면 길을 가야합니다. –