1
start date: 2012-05-29 08:30:00.000
end date: 2012-05-29 15:00:00.000

DATEDIFF(hour,StartDateTime,EndDateTime)

这给了我 7 个小时,但实际上是 6.30

我该如何计算呢?

4

7 回答 7

1

如果你想要准确性,你应该使用这种方法

declare @start_date datetime, @end_Date datetime
select @start_date='2012-05-29 08:30:00.000', @end_date='2012-05-29 15:00:00.000'
select datediff(minute,@start_date ,@end_Date)/60.0
于 2012-07-13T06:42:15.813 回答
1
declare @start_date datetime, @end_Date datetime
select @start_date='2012-05-29 08:30:00.000'
select @end_date='2012-05-29 15:00:00.000'
select cast(DATEDIFF(MINUTE,@start_date,@end_Date)/60 as varchar)
+'.'+CAST(DATEDIFF(MINUTE,@start_date,@end_Date)%60 as varchar)

这会给你你想要的结果

6.30

于 2012-07-13T06:46:16.013 回答
0

以分钟为单位获取差异,然后将分钟转换为小时..

于 2012-07-13T06:41:06.457 回答
0

当您使用“小时”日期部分时,它会为您提供一个四舍五入的值。使用分钟,它会返回 390min,是正确的答案。然后转换为小时。

这个链接应该可以帮助你更好地理解你在用这个语句做什么。检查 MSDN 以获取DATEDIFF sintaxis 并使用

示例代码:

    DECLARE @StartDateTime DATETIME='2012-05-29 08:30:00.000'
    DECLARE @EndDateTime DATETIME='2012-05-29 15:00:00.000'

     SELECT DATEDIFF(MINUTE,@StartDateTime,@EndDateTime)/60.0
于 2012-07-13T06:45:22.317 回答
0

datediff 函数只计算指定单位的交叉,而不是两个值之间的实际时间。因此,在您的情况下,时间之间的“小时”交叉点是 9、10、11、12、13、14 和 15,总共 7 个“小时”交叉点。因此,为了获得更高的精度,您希望在 datediff 函数中使用一个时间单位来表示您需要的精度,然后将其转换为小时。

于 2012-07-13T06:46:13.387 回答
0

以小时和分钟为单位查找确切时间的代码,

DECLARE @STARTDATE DATETIME='2015-10-03 19:49:37.000' 
DECLARE @ENDDATE DATETIME='2015-10-05 07:31:28.000'
DECLARE @HourOfDiff INT=CAST(datediff(minute,@STARTDATE ,@ENDDATE)/60.0 AS INT)
DECLARE @MinofDiff INT=DATEDIFF(mi,@STARTDATE,@ENDDATE)-(@HourOfDiff*60)
SELECT CAST(@HourOfDiff AS VARCHAR(10))+':'+ CAST(@MinofDiff  AS VARCHAR(10))
于 2015-10-13T06:06:46.720 回答
0

您可以使用以下工作示例 -

SELECT DATEDIFF("mi",StartDate,EndDate)/60 AS TimeInHours FROM dbo.JobData<BR>

SELECT DATEDIFF("ss",StartDate,EndDate)/3600 AS TimeInHours FROM dbo.JobData

对于 Hours Sql Server 不会产生正确/准确的数据,因此以分钟或秒计算,然后转换为小时。

于 2016-04-05T16:28:08.053 回答