十进制的总和转换为小时和分钟

时间:2017-03-15 11:20:32

标签: sql-server-2008

请有人帮助我。 我想加班加点。

示例:

Date    Ot hours    
Feb 2   0.30    
Feb 3   0.30    
Feb 4   0.30    
Feb 5   0.30    
Feb 6   0.30    
Feb 7   0.30    
Feb 8   0.30    
Total   2.10    

总计应为3.30(3小时30分钟)。

我在SQL中尝试过:

SELECT CONVERT(DECIMAL(18,2), floor(sum(floor(OT_HRS)) + sum(OT_HRS - floor(OT_HRS)) * 100.0/60)/1 + ((sum(floor(OT_HRS))/1 + sum(OT_HRS - floor(OT_HRS)) * 100.0/60) % 1) * 60.0/100 ) 
FROM T_SUMMARY_ATTENDANCE 
WHERE OT_HRS is not null 

谢谢。

2 个答案:

答案 0 :(得分:1)

假设这是在表格中,请采取以下方法:

  • 将值转换为分钟
  • 总结分钟
  • 转换回您想要的内容

所以:

select sum(ot_hours * 100) as minutes,
       (sum(ot_hours * 100) / 60 +
        sum(ot_hours * 100) % 60) / 100.0
       )
from . . .

完成算术后,我强烈建议您不要将数据存储为此格式的数字。如果您的值始终少于24小时,则可以使用time数据类型。如果更大,那么我会推荐两种解决方案之一:

  • 以十进制小时为准。因此,90分钟将是1.5小时而不是1.3小时。
  • 以字符串形式存储。所以,90分钟将是' 01:30'。

这些都是其他人不会感到困惑的标准格式。

答案 1 :(得分:0)

这将给出预期的结果。

select  cast(cast((SUM(OT_HRS)*100)/60 as int) as varchar(10))+ ':' + cast(cast((SUM(OT_HRS)*100)%60 as int) as varchar(10)) 
from #T_SUMMARY_ATTENDANCE