如何使用SQL Server 2005中的SQL等效于Excel公式计算TimeDifference?

时间:2016-04-18 15:13:41

标签: sql sql-server

StartTime   EndTime  TimeDifference
6:36:56     6:36:56  00:31 :52
7:08:48     7:26:18  00:00 :23
7:26:41     8:08:26  00:00 :09
08:35.0     16:54.0  00:09 :42
26:36.0     59:34.0  00:00 :09
59:43.0     19:13.0  #VALUE!

使用公式F(x)= TEXT(A3-B2," hh:mm:ss")在Excel中执行此计算,但如何在SQL Server 2005中使用SQL实现此目的? 请记住,标题排在第1行,而实际时间从第2行,第3行等开始。因此,7:08:48 - 6:36:56 = 00:31:52分别是正确的,这就是我想要的计算。警告:我不想这样计算(7:26:18 - 7:08:48 = 00:17:30)它很简单,不符合我的业务需求而且我知道它

2 个答案:

答案 0 :(得分:0)

试试例子

 SELECT CONVERT(VARCHAR(10),DATEADD(MINUTE,DATEDIFF(MINUTE,'7:08:48','7:26:18'),'2011-01-01 00:00:00.000'),114)

答案 1 :(得分:0)

您可以使用DATEDIFF函数来获取两个DateTime值之间的时间部分的差异(请参阅http://www.w3schools.com/sql/func_datediff.asp

例如,以下SQL将为您提供两个DateTimes之间的小时,分​​钟和秒

DECLARE @DT1 DATETIME

SET @DT1= '2016-04-18'
DECLARE @DT2 DATETIME 
SET @DT2 = GETDATE()

SELECT 
    DATEDIFF(HOUR, @DT1, @DT2) AS [Hours],
    DATEDIFF(MINUTE, @DT1, @DT2) - (DATEDIFF(HOUR, @DT1, @DT2) * 60) AS [Minutes],
    DATEDIFF(SECOND, @DT1, @DT2) - (DATEDIFF(MINUTE, @DT1, @DT2) * 60) AS [Seconds]

Hours   Minutes Seconds
16      31      35

你要做的是找到不同行上的DateTimes之间的区别,所以你需要使用OUTER APPLY将表连接到自身,如下所示(如果你有一个递增的ID列,那么LEFT JOIN on tb1a.id = tb1b.id + 1表现更好):

DECLARE @Table1 TABLE (Date1 DATETIME, Date2 DATETIME)

INSERT INTO @Table1 VALUES('2016-04-18 10:01', '2016-04-18 10:02')
INSERT INTO @Table1 VALUES( '2016-04-18 10:06','2016-04-18 10:09')

SELECT t1a.Date1, t1a.Date2 , t1b.Date1, t1b.Date2 
FROM @Table1 t1a
OUTER APPLY 
    (
        SELECT TOP 1 Date1, Date2 FROM @Table1 t1b WHERE Date1 > t1a.Date1 ORDER BY Date1
    ) t1b

这给了你:

Date1                  Date2                 NextDate1              NextDate2
2016-04-18 10:01:00    2016-04-18 10:02:00   2016-04-18 10:06:00    2016-04-18 10:09:00
2016-04-18 10:06:00    2016-04-18 10:09:00   NULL                   NULL

然后您需要做的就是使用上面的DATEDIFF来产生时差