如何计算SQL Server中两个date之间的差异(小数)?

我必须计算SQL Server 2008中两个date之间的差异(十进制types)。

我无法find任何有用的技术来将date时间转换为十进制,MSDN上的“CONVERT”。
有人可以帮我吗?

更新:
要清楚,我也需要小数部分(因此十进制types)。 所以从9点到10点半,它应该返回我1.5。

DATEDIFF(hour, start_date, end_date)将会给你start_dateend_date之间的小时边界数。

如果您需要小数小时数,则可以使用更高分辨率的DATEDIFF ,然后除以结果:

 DATEDIFF(second, start_date, end_date) / 3600.0 

DATEDIFF的文档可在MSDN上find:

http://msdn.microsoft.com/en-us/library/ms189794%28SQL.105%29.aspx

只需要减去两个date时间值并乘以24:

  Select Cast((@DateTime2 - @DateTime1) as Float) * 24.0 

testing脚本可能是:

  Declare @Dt1 dateTime Set @Dt1 = '12 Jan 2009 11:34:12' Declare @Dt2 dateTime Set @Dt2 = getdate() Select Cast((@Dt2 - @Dt1) as Float) * 24.0 

这是有效的,因为所有的date时间都是内部存储的一对整数,第一个整数是自1900年1月1日以来的天数,第二个整数(代表时间)是自午夜以来的( 1 ) (对于SmallDatetimes,时间部分整数是自午夜以来的分钟数)。 对这些值进行的任何运算都使用时间部分作为一天的一小部分。 6am = 0.25,中午= 0.5,等等…详情请参阅MSDN链接 。

因此,Cast((@ Dt2 – @ Dt1)作为Float)给你两个date之间的总天数。 乘以24转换成小时。 如果你需要总分钟数,每分钟多个(24 * 60 = 1440),而不是24 …

注1 :这与dotNet或者javaScript的tick不一样 – 这个tick约为3.33毫秒。

DATEDIFF但注意它返回一个整数,所以如果你需要几分钟的时间使用这样的东西: –

 CAST(DATEDIFF(ss, startDate, endDate) AS decimal(precision, scale)) / 3600 

您可能正在寻找DATEDIFFfunction。

DATEDIFF(datepart,startdate,enddate)

你的代码可能看起来像这样:

DATEDIFF(hh,startdate,enddate)

 Declare @date1 datetime Declare @date2 datetime Set @date1 = '11/20/2009 11:00:00 AM' Set @date2 = '11/20/2009 12:00:00 PM' Select Cast(DateDiff(hh, @date1, @date2) as decimal(3,2)) as HoursApart 

结果= 1.00

SELECT DATEDIFF(hh,firstDate,secondDate)FROM tableName WHERE …