SQL如何以HH:MM:SS格式添加两个日期

SQL如何以HH:MM:SS格式添加两个日期,sql,sql-server,date,datetime,Sql,Sql Server,Date,Datetime,我试图计算每天早上和下午两班制的总工作时间。早班的栏目是TimeIN和BreakOut,下午的BreakIN和TimeOut,但我没有得到总工作时间 蒂亚。任何帮助都将不胜感激 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 datet

我试图计算每天早上和下午两班制的总工作时间。早班的栏目是TimeIN和BreakOut,下午的BreakIN和TimeOut,但我没有得到总工作时间

蒂亚。任何帮助都将不胜感激

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

也许你看起来像这样:

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 
输出

TOTAM
4:24:57

TOTPM
3:24:57
编辑:

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

TotalTime
8:23:52

上午至下午的总工作时间为

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

你得到了什么,你期望得到什么?几乎接近,但我需要加上TOTAM和TOTPM作为一天的总工作时间。谢谢。@Ganesh:但你们得到的答案是不正确的。只需重新检查TotalPM。完美!我使用谷歌转换工具,它显示8.39778。3600和%3600是做什么的?@r2c3:我们可以用总秒数除以3600得到总小时数。3600因为1小时有60分钟,每分钟有60秒,所以最终60*60=3600。但为了计算分钟数,我们使用模运算符(%)得到总秒数的余数,然后用余数除以60得到实际分钟数。同样的事情持续了几秒钟。确认结果@帕雷什Jadhav@r2c3:如果您得到了答案,您可以向上投票并单击复选标记以接受答案。