Mar*_*arc 76 t-sql sql-server datetime decimal
我必须计算SQL Server 2008中两个日期之间的小时数(十进制类型).
在MSDN上使用'CONVERT'将datetime转换为十进制时,我找不到任何有用的技术.
任何人都可以帮助我吗?
更新:
要清楚,我也需要小数部分(因此十进制类型).所以从9点到10点30分它应该还给我1.5.
Phi*_*oss 148
DATEDIFF(hour, start_date, end_date)会给你start_date和之间交叉的小时数end_date.
如果您需要小时数,可以使用DATEDIFF更高的分辨率并将结果除以:
DATEDIFF(second, start_date, end_date) / 3600.0
Run Code Online (Sandbox Code Playgroud)
DATEDIFFMSDN上提供了相关文档:
http://msdn.microsoft.com/en-us/library/ms189794%28SQL.105%29.aspx
Cha*_*ana 14
只需减去两个日期时间值并乘以24:
Select Cast((@DateTime2 - @DateTime1) as Float) * 24.0
Run Code Online (Sandbox Code Playgroud)
测试脚本可能是:
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
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为所有日期时间都在内部存储为一对整数,第一个整数是自1900年1月1日以来的天数,第二个整数(表示时间)是自午夜以来的(1)个滴答数.(对于SmallDatetimes,时间部分整数是自午夜以来的分钟数).对值进行的任何算术都将时间部分用作一天的一小部分.早上6点= 0.25,中午= 0.5等...有关详细信息,请参阅此处的MSDN链接.
所以Cast((@ Dt2 - @ Dt1)为Float)给出两个日期时间之间的总天数.乘以24转换为小时.如果您需要总分钟数,则每天多个分钟(24*60 = 1440)而不是24分钟...
注1:这与dotNet或javaScript tick不同 - 此刻度约为3.33毫秒.
DATEDIFF但请注意它返回一个整数,所以如果你需要几小时的时间使用这样的东西: -
CAST(DATEDIFF(ss, startDate, endDate) AS decimal(precision, scale)) / 3600
Run Code Online (Sandbox Code Playgroud)