在我的SQL表中,我有3个coulmns:
StartDateTime (DATETIME),
EndDateTime (DATETIME),
TimeWorked (DECIMAL(9,2))
我正在尝试使用开始和结束时间之间的总小时数和分钟来填充TimeWorked列。如果我使用
DATEDIFF(HOUR, StartDateTime, EndDateTime)
我把时间缩小了,所以我想我会用
DATEDIFF(MINUTE, StartDateTime, EndDateTime) / 60
但是在90分钟的时间里我得到了1.00小时。我做了一些搜索,发现大多数地方建议转换数字,所以我尝试只转换DATEDIFF
的结果和整个数学方程式如
CONVERT(decimal(9,2),(DATEDIFF(MINUTE, StartDateTime, EndDateTime)) / 60);
CONVERT(decimal(9,2),(DATEDIFF(MINUTE, StartDateTime, EndDateTime) / 60));
但结果仍然是向下舍入到最接近的小时。我用来测试的时间是:
StartDateTime
2014-10-13 17:30:00.000
EndDateTime
2014-10-13 19:00:00.000
以十进制格式获取数字或小时和分钟的最佳方法是什么(即1.5这次是正确的结果)?如果它有任何区别,则会出现在SET
语句的UPDATE
部分。
答案 0 :(得分:1)
您可以使用DATEDIFF(MINUTE, StartDateTime, EndDateTime) / 60.0
来避免整数除法并获得所需的结果。
这是有效的,因为60.0
被解释为decimal
而不是integer
类型的文字。
您的方法存在问题
CONVERT(decimal(9,2),(DATEDIFF(MINUTE, StartDateTime, EndDateTime) / 60));
整数除法是否已在演员表之前发生。因此,您只需将整数1
转换为decimal
。
答案 1 :(得分:1)
希望这会对你有所帮助:
DECLARE @StartDate DATETIME
, @EndDate DATETIME
SELECT @StartDate = '2014-10-13 17:30:00.000'
SELECT @EndDate = '2014-10-13 19:00:00.000'
然后选择如下:
SELECT DATEDIFF(MINUTE, @StartDate, @EndDate) / 60.0
OR
SELECT CONVERT(DECIMAL(9,2), DATEDIFF(MINUTE, @StartDate, @EndDate) / 60.0)
答案 2 :(得分:0)
我认为你也可以使用这个想法:
declare @StartDate datetime, @EndDate datetime
select @StartDate = '2014-10-13 17:30:00.000'
select @EndDate = '2014-10-13 19:00:00.000'
select convert(varchar(5),DateDiff(s, @startDate, @EndDate)/3600) + ':'
+ convert(varchar(5),DateDiff(s, @startDate, @EndDate)%3600/60) + ':'
+ convert(varchar(5),(DateDiff(s, @startDate, @EndDate)%60)) as [hh:mm:ss]
,(convert(varchar(5),DateDiff(s, @startDate, @EndDate)/3600)) as H
,(convert(varchar(5),DateDiff(s, @startDate, @EndDate)%3600/60) /60.) as M
,(convert(varchar(5),(DateDiff(s, @startDate, @EndDate)%60)) /60.) as S
,(convert(varchar(5),DateDiff(s, @startDate, @EndDate)/3600))
+(convert(varchar(5),DateDiff(s, @startDate, @EndDate)%3600/60) /60.)
+(convert(varchar(5),(DateDiff(s, @startDate, @EndDate)%60)) /60.) as DT_Diff
结果:
hh:mm:ss H M S DT_Diff
1:30:0 1 0.500000 0.000000 1.500000