2014-11-01 2 views
0

Im пытается вычислить ежедневное общее количество часов работы с двухнедельного смены. Колонки для утренней смены - TimeIN и BreakOut, а также дневной BreakIN и TimeOut, но Im не получают общее рабочее время.SQL Как добавить две даты в формате HH: MM: SS

TIA. Любая помощь будет оценена.

declare @timein datetime ='2014-10-29 07:40:14.000' 
,@breakout datetime = '2014-10-29 12:05:11.000' 
,@breakin datetime ='2014-10-29 15:06:14.000' 
,@timeout datetime ='2014-10-29 19:05:09.000' 
,@totAM int, @totPM int , @totWorkHrs datetime 

set @totAM = DATEDIFF (second , @timein , @breakout) 
set @totPM = DATEDIFF (second , @breakin , @timeout) 
set @totWorkHrs = @totAM + @totPM 

Result: 
@totAM = 15897 
@totPM = 14335 
@totWorkHrs = 30232 

Output: 
08:39:xx 
+1

Что вы получаете, и что вы _expecting_ получить? –

ответ

0

Всего рабочих часов с утра до вечера будет

declare @timein datetime ='2014-10-29 07:40:14.000' 
,@breakout datetime = '2014-10-29 12:05:11.000' 
,@breakin datetime ='2014-10-29 15:06:14.000' 
,@timeout datetime ='2014-10-29 19:05:09.000' 
,@totAM int, @totPM int, @totHrs int, @totMins int, @totSecs int, @totAMPM int , @totWorkHrs datetime 

set @totAM = DATEDIFF (second , @timein , @breakout) 

set @totPM = DATEDIFF (second , @breakin , @timeout) 

SET @totAMPM = (@totPM+ @totAM) 

SET @totHrs = @totAMPM/3600 
SET @totMins = (@totAMPM % 3600)/60 
SET @totSecs = @totAMPM % 60 


Select @totHrs as Hours, @totMins as minutes, @totSecs as Seconds 
+0

Отлично! Я использую инструменты для преобразования Google, и он показывает 8.39778. Что делает 3600 и% 3600? –

+0

@ r2c3: мы можем получить общее количество часов, разделив общее количество секунд на 3600. 3600, потому что 1 час имеет 60 минут и в минуту имеет 60 секунд, поэтому в конечном итоге 60 * 60 = 3600. Но для расчета минут мы используем оператор Modulo (%), чтобы получить остаток от общей секунды, а затем мы разделим остаток на 60, чтобы получить фактические минуты. И то же самое следует за секундами. –

+0

подтверждено результат. @Paresh Jadhav –

0

Может быть Вы ищете Как это:

declare @timein datetime ='2014-10-29 07:40:14.000' 
,@breakout datetime = '2014-10-29 12:05:11.000' 
,@breakin datetime ='2014-10-29 15:06:14.000' 
,@timeout datetime ='2014-10-29 19:05:09.000' 
,@totAM int, @totPM int , @totWorkHrs datetime 

set @totAM = DATEDIFF (second , @timein , @breakout) 
set @totPM = DATEDIFF (second , @breakin , @timeout) 




SELECT CONVERT(VARCHAR(10),@totAM/3600) 
    +':' 
    + RIGHT('00'+CONVERT(VARCHAR(2),(@totAM%3600)/60),2) 
    +':' 
    + RIGHT('00'+CONVERT(VARCHAR(2),@totAM%60),2)as TOTAM 


SELECT CONVERT(VARCHAR(10),@totPM/3600) 
    +':' 
    + RIGHT('00'+CONVERT(VARCHAR(2),(@totAM%3600)/60),2) 
    +':' 
    + RIGHT('00'+CONVERT(VARCHAR(2),@totAM%60),2)as TOTPM 

OUTPUT

TOTAM 
4:24:57 

TOTPM 
3:24:57 

EDIT:

SELECT CONVERT(VARCHAR(10),(@[email protected])/3600) 
    +':' 
    + RIGHT('00'+CONVERT(VARCHAR(2),((@[email protected])%3600)/60),2) 
    +':' 
    + RIGHT('00'+CONVERT(VARCHAR(2),(@[email protected])%60),2)as TotalTime 

TotalTime 
8:23:52 
+0

Почти близко, но мне нужно добавить TOTAM и TOTPM как общее рабочее время в день. Благодарю. –

+0

@Ganesh: Но ответ, который вы получаете, неверен. Просто перепроверьте TotalPM. –

+0

Спасибо за время! –

Смежные вопросы