2012-03-01 91 views
22

我需要比较两个日期并返回两个小数位之间的天数。TSQL DateDiff返回小数点后两位的天数

例如:

比较

SubmittedDate = 2012-02-29 07:02:55.000 

FirstCall = 2012-02-29 12:12:19.000 

即在5小时时的差异。因此,我将返回0.2天

我曾尝试:

CAST(DATEDIFF(Hour, SubmittedDate, FirstCall)/30.0 AS DECIMAL(5,2)) As HoursBeforeFirstCall 
CAST(DATEDIFF(Day, SubmittedDate, FirstCall) AS DECIMAL(5,2)) As HoursBeforeFirstCall 

无似乎工作。

回答

32

取而代之以DateDiff,然后除以86400.0。小数点是必需的。

+0

这个伟大的工程。有没有办法我可以把它降到2位小数 – 2013-01-22 16:27:21

1

这个怎么样。

select convert(decimal(12,2),convert(decimal(12,2),datediff(second,'2012-02-29 07:02:55.000','2012-02-29 12:12:19.000'))/60/60/24) 
3

当您将一个日期表示为一个数字时,每一天都已经用1.0“单位”表示。要将两个日期的时间跨度作为小数点,可以将它们相减。

SELECT CAST((@FirstCall - @SubmittedDate) AS NUMERIC(10, 2)) 
+0

如果有人打算使用这种方法,我相信你会想要除以'365.2425' – daveomcd 2016-05-11 13:21:26

+0

@daveomcd为什么?问题在于要求时间跨度为几天,而不是几年,而且我认为无论如何,大多数情况下您的计算结果都不准确。 – JackAce 2016-05-11 16:39:56

+0

我的歉意错过了我猜想的那几天......为什么不是多年的正确? – daveomcd 2016-05-11 17:42:13

0

这里是我做了什么:

ROUND(SUM(DATEDIFF(ss,StartDateTime,EndDateTime)/60.0/60.0), 2)