Sql中的Datediff函数没有给出准确的小时值

时间:2012-07-13 06:37:59

标签: sql

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

我该如何计算?

7 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

在几分钟内获得差异,然后将分钟转换为小时..

答案 2 :(得分:0)

如果您想要准确性,则应使用此方法

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

答案 3 :(得分:0)

当您使用“小时”datepart时,它会为您提供舍入值。使用分钟,它将返回390min,是正确的答案。然后转换为几小时。

This link应该可以帮助您更好地了解您在使用此声明时所做的工作。同时检查MSDN是否为DATEDIFF sintaxis and uses

示例代码:

    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

答案 4 :(得分:0)

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

答案 5 :(得分: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))

答案 6 :(得分:0)

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

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

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

For Hours Sql Server无法生成正确/准确的数据,因此请在分钟或秒内计算,然后转换为小时。