如何计算SQL Server中两个date之间的差异(小数)?
我必须计算SQL Server 2008中两个date之间的差异(十进制types)。
我无法find任何有用的技术来将date时间转换为十进制,MSDN上的“CONVERT”。
有人可以帮我吗?
更新:
要清楚,我也需要小数部分(因此十进制types)。 所以从9点到10点半,它应该返回我1.5。
DATEDIFF(hour, start_date, end_date)
将会给你start_date
和end_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 …