我正在尝试对时间值求和并采用小时:分钟:秒的格式,即 100:30:10。
SEC_TO_TIME(SUM(TIME_TO_SEC(ActualHours))) AS Hours
但是我遇到了问题,因为时间的最大值是 838:59:59。 因此,如果总时间超过该值,则不会显示,即如果等于 900 小时,则会显示为 838:59:59,这是错误的。
如果总小时数超过838:59:59,如何显示?
最佳答案
如果我必须在 SQL 中进行此转换,我会这样做:
SELECT CONCAT( ( _secs_ DIV 3600)
, ':'
, RIGHT(CONCAT('0',( _secs_ DIV 60 ) MOD 60 ),2)
, ':'
, RIGHT(CONCAT('0',( _secs_ MOD 60)),2)
) AS `h:mm:ss`
我们可以将 _secs_
替换为返回我们想要转换的秒数的表达式。使用问题中给出的表达式,我们得到如下结果:
SELECT CONCAT( ( SUM(TIME_TO_SEC(ActualHours)) DIV 3600)
, ':'
, RIGHT(CONCAT('0',( SUM(TIME_TO_SEC(ActualHours)) DIV 60 ) MOD 60 ),2)
, ':'
, RIGHT(CONCAT('0',( SUM(TIME_TO_SEC(ActualHours)) MOD 60)),2)
) AS `h:mm:ss`
演示
此答案中提供的语法在 MySQL 5.6 中有效。作为演示,使用用户定义的变量@_secs
作为表达式秒数:
设置用户定义变量进行演示:
SELECT @_secs_ := ( 987 * 3600 ) + ( 5 * 60 ) + 7 ;
返回
@_secs := ( 987 * 3600 ) + ( 5 * 60 ) + 7
-----------------------------------------
3553507
演示查询模式:
SELECT CONCAT( ( @_secs_ DIV 3600)
, ':'
, RIGHT(CONCAT('0',( @_secs_ DIV 60 ) MOD 60 ),2)
, ':'
, RIGHT(CONCAT('0',( @_secs_ MOD 60)),2)
) AS `hhh:mm:ss`
返回
hhh:mm:ss
---------
987:05:07
关于mysql - SUM 时间值 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52723146/