SQL如何以HH:MM:SS格式添加两个日期
我试图计算每天早上和下午两班制的总工作时间。早班的栏目是TimeIN和BreakOut,下午的BreakIN和TimeOut,但我没有得到总工作时间 蒂亚。任何帮助都将不胜感激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
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:如果您得到了答案,您可以向上投票并单击复选标记以接受答案。