mysql - SUM 时间值 MySQL

标签 mysql time mysql-workbench

我正在尝试对时间值求和并采用小时:分钟:秒的格式,即 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/

相关文章:

javascript - 如何在jsp中保留mysql的last_insert_id()

mysql - 低内存机器在更短的时间内完成大型表更改

mysql - 选择具有最新时间戳的记录

java - LocalDateTime 作为总纳秒

java - 如何使用 Java 在特定时间触发一个方法?

mysql - 查询中的日期数组

mysql - Concat (SQL) 的 NetSuite 字段公式问题

mysql - 寻找四舍五入列中的数字

python-闹钟建议

MySql:连接有重复项的列