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
我该如何计算呢?
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
我该如何计算呢?
如果你想要准确性,你应该使用这种方法
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
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
以分钟为单位获取差异,然后将分钟转换为小时..
当您使用“小时”日期部分时,它会为您提供一个四舍五入的值。使用分钟,它会返回 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
datediff 函数只计算指定单位的交叉,而不是两个值之间的实际时间。因此,在您的情况下,时间之间的“小时”交叉点是 9、10、11、12、13、14 和 15,总共 7 个“小时”交叉点。因此,为了获得更高的精度,您希望在 datediff 函数中使用一个时间单位来表示您需要的精度,然后将其转换为小时。
以小时和分钟为单位查找确切时间的代码,
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))
您可以使用以下工作示例 -
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 不会产生正确/准确的数据,因此以分钟或秒计算,然后转换为小时。