我必须计算SQL Server 2008中两个日期之间的小时数(十进制类型)。
我找不到任何有用的技术,可以在MSDN上使用'CONVERT'将datetime转换为十进制。
有人可以帮我吗?
更新:
为了清楚起见,我也需要小数部分(因此是十进制类型)。所以从9点到10点30分它应该给我1.5。
答案 0 :(得分:140)
DATEDIFF(hour, start_date, end_date)
会为您提供start_date
和end_date
之间的小时边界数。
如果您需要小时数,可以使用更高分辨率的DATEDIFF
并将结果除以:
DATEDIFF(second, start_date, end_date) / 3600.0
MSDN上提供了DATEDIFF
的文档:
http://msdn.microsoft.com/en-us/library/ms189794%28SQL.105%29.aspx
答案 1 :(得分:14)
只需减去两个日期时间值并乘以24:
Select Cast((@DateTime2 - @DateTime1) as Float) * 24.0
测试脚本可能是:
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
这是有效的,因为所有日期时间都在内部存储为一对整数,第一个整数是自1900年1月1日以来的天数,第二个整数(代表时间)是( 1 强烈的>) 滴答 ,因为午夜。 (对于SmallDatetimes,时间部分整数是自午夜以来的分钟数)。对值进行的任何算术都将时间部分用作一天的一小部分。 6am = 0.25,中午= 0.5等...有关详细信息,请参阅MSDN link here。
So Cast((@ Dt2 - @ Dt1)为Float)给出两个日期时间之间的总天数。乘以24转换为小时。如果你需要总分钟数,每天多个分钟(24 * 60 = 1440)而不是24 ......
注意1 :这与dotNet或javaScript tick不同 - 此刻度约为3.33毫秒。
答案 2 :(得分:9)
DATEDIFF,但请注意它会返回一个整数,所以如果你需要几小时的时间,请使用以下内容: -
CAST(DATEDIFF(ss, startDate, endDate) AS decimal(precision, scale)) / 3600
答案 3 :(得分:1)
使用Postgres我遇到了DATEDIFF的问题,但在此方面取得了成功:
DATE_PART('day',(delivery_time)::timestamp - (placed_time)::timestamp) * 24 +
DATE_PART('hour',(delivery_time)::timestamp - (placed_time)::timestamp) +
DATE_PART('minute',(delivery_time)::timestamp - (placed_time)::timestamp) / 60
给了我一个类似“14.3”的输出
答案 4 :(得分:0)
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
答案 5 :(得分:0)
答案 6 :(得分:-1)
SELECT DATEDIFF(hh,firstDate,secondDate) FROM tableName 在哪里......