我想要两个日期时间的小时,分​​钟,秒差异

Kis*_*jar 7 sql datetime sql-server-2008

我正在为员工开发时间管理系统.

我想要持续时间员工迟到多久,或者他早点去.

我有以下结构.

**Attendace**  
AutoId --uniqueidentifier             
EMployeeId --uniqueidentifier
Date   --datetime
InTime -- varchar(50)
OutTime -- varchar(50)
ActualInTime--datetime
ActualOutTime--datetime
Run Code Online (Sandbox Code Playgroud)

我想要迟到的报告(即谁在ActualInTime之后的早上来得很晚,以及hh:mm:ss持续多长时间)并且还想要早点去(即在格式hh:mm:ss格式的持续时间中,在ActualOutTime之前的那个早上去的人)

所以,请你帮帮我.. ???

小智 13

你可以用一种非常简单的方式完成它:

declare  @date1 datetime, @date2 datetime
set @date1=DATEADD(s,-638,getdate())
set @date2=GETDATE()

select convert(char(8),dateadd(s,datediff(s,@date1,@date2),'1900-1-1'),8)
Run Code Online (Sandbox Code Playgroud)

...结果是00:10:38(638s = 600s + 38s = 10分38秒)

另一个例子:

select distinct convert(char(8),dateadd(s,datediff(s, CRDATE , GETDATE() ),'1900-1-1'),8) from sysobjects order by 1
Run Code Online (Sandbox Code Playgroud)

它将一直有效,直到相差86399秒(23:59:59):

select convert(char(8),dateadd(s,datediff(s
    , DATEADD(s,-86399,GETDATE())
    , GETDATE()
),'1900-1-1'),8)
Run Code Online (Sandbox Code Playgroud)

...之后它将返回零:

select convert(char(8),dateadd(s,datediff(s
    , DATEADD(s,-86400,GETDATE())
    , GETDATE()
),'1900-1-1'),8)
Run Code Online (Sandbox Code Playgroud)


Mik*_*ill 9

我遇到了解决这个问题的简单方法.

首先,将"秒数"转换为"hh:mm:ss"格式的快速示例.

DECLARE @NumberOfSeconds int
SET @NumberOfSeconds = 3843     --  1 hour, 4 minutes, 3 seconds

SELECT @NumberOfSeconds AS 'seconds',
   CONVERT(varchar, DATEADD(second, @NumberOfSeconds, 0), 108) AS 'hh:mm:ss'
Run Code Online (Sandbox Code Playgroud)

这将给我们这个输出:

在此输入图像描述

我们可以轻松地更进一步,计算两个日期时间之间的秒数,并以hh:mm:ss格式显示:

DECLARE 
    @NumberOfSeconds int,
    @StartTime datetime = '2017-09-14 14:16:11',
    @EndTime datetime = '2017-09-14 14:23:13'

SET @NumberOfSeconds = DATEDIFF(second, @StartTime, @EndTime)

SELECT @NumberOfSeconds AS 'seconds',
     CONVERT(varchar, DATEADD(second, @NumberOfSeconds, 0), 108) AS 'hh:mm:ss'
Run Code Online (Sandbox Code Playgroud)

这给了我们这个输出:

在此输入图像描述

简单,嘿?

(是的,您可以DATEDIFF直接将其放入DATEADD函数中来进一步简化它.)


Ann*_*nnu 4

这段代码可能会帮助你...

DECLARE @First datetime
DECLARE @Second datetime
SET @First = '04/02/2008 05:23:22'
SET @Second = getdate()

SELECT DATEDIFF(day,@First,@Second)*24 as TotalHours,
DATEDIFF(day,@First,@Second)*24*60 as TotalMinutes,
DATEDIFF(day,@First,@Second)*24*60*60 as TotalSeconds
Run Code Online (Sandbox Code Playgroud)