【发布时间】:2017-08-29 20:30:27
【问题描述】:
如何在 SQL Server 中获取两个日期之间的小时数
例子:
staffing_start_date (2017-08-01 06:00:00.00000)
staffing_end_dt (2017-08-01 18:00:00.00000)
【问题讨论】:
标签: sql sql-server
如何在 SQL Server 中获取两个日期之间的小时数
例子:
staffing_start_date (2017-08-01 06:00:00.00000)
staffing_end_dt (2017-08-01 18:00:00.00000)
【问题讨论】:
标签: sql sql-server
你会使用datediff():
select datediff(hour, staffing_start_date, staffing_end_date)
【讨论】:
如果需要小数小时数,可以在下面使用
DATEDIFF(second, staffing_start_date, staffing_end_date) / 3600.0
【讨论】:
请注意 DateDiff 的意外问题。它根本没有四舍五入。它将截断到您正在寻找的级别(天、小时、分钟等)
例如,这两个都将返回 1,因此大多数时候将 Ferdinand 的答案四舍五入更合适。
declare @Start DateTime = '1/1/17 7:59 AM'
Declare @End Datetime = '1/1/17 8:00 AM'
select DATEDIFF(hour, @Start, @end)
declare @Start DateTime = '1/1/17 7:01 AM'
Declare @End Datetime = '1/1/17 8:59 AM'
select DATEDIFF(hour, @Start, @end)
【讨论】:
感谢 @Jay Wheeler 的 cmets。
如果您希望小时非常具体,您可以使用如下所示:
Declare @Start DateTime = '1/1/17 7:59 AM'
Declare @End Datetime = '1/1/17 8:00 AM'
select DATEDIFF(MINUTE, @Start, @end) /60 AS Hour
【讨论】:
如果您不理解其他答案,可以使用DATEDIFF。
【讨论】:
日期只是数字。数字的整数部分是日期,小数部分是时间。要获得天数差异,您只需转换为 int 并将小时数差异乘以 24。
DECLARE @Date1 DateTime
DECLARE @Date2 DateTime
SELECT @Date1 = {ts '2017-08-29 00:00:00.000'},
@Date2 = {ts '2017-08-27 00:00:00.000'}
SELECT CONVERT(int, @Date1) - CONVERT(int, @Date2) AS DifferenceInDays
SELECT (CONVERT(int, @Date1) - CONVERT(int, @Date2)) * 24 AS DifferenceInHours
或者你可以使用DATEDIFF。
【讨论】:
见DATEDIFF函数-https://docs.microsoft.com/en-us/sql/t-sql/functions/datediff-transact-sql。
对于您的问题,您可以使用:
DATEDIFF( HOUR, staffing_start_date , staffing_end_dt )
DATEDIFF( HH, staffing_start_date , staffing_end_dt )
【讨论】: