总时间值

bwitn5fc  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(244)

这个问题在这里已经有答案了

超过mysql的时间值限制838:59:59(6个答案)
两年前关门了。
我试图将时间值求和,并以hours:minutes:秒,即100:30:10。

  1. SEC_TO_TIME(SUM(TIME_TO_SEC(ActualHours))) AS Hours

但我有个问题,因为时间的最大值是838:59:59。因此,如果时间总和超过这个值,它就不会显示,也就是说,如果它等于900小时,它将显示为838:59:59,这是错误的。
如果超过838:59:59,如何显示总小时数?

gzszwxb4

gzszwxb41#

如果必须用sql进行转换,我会这样做:

  1. SELECT CONCAT( ( _secs_ DIV 3600)
  2. , ':'
  3. , RIGHT(CONCAT('0',( _secs_ DIV 60 ) MOD 60 ),2)
  4. , ':'
  5. , RIGHT(CONCAT('0',( _secs_ MOD 60)),2)
  6. ) AS `h:mm:ss`

我们可以换个新的 _secs_ 返回要转换的秒数的表达式。使用问题中给出的表达式,我们得到如下结果:

  1. SELECT CONCAT( ( SUM(TIME_TO_SEC(ActualHours)) DIV 3600)
  2. , ':'
  3. , RIGHT(CONCAT('0',( SUM(TIME_TO_SEC(ActualHours)) DIV 60 ) MOD 60 ),2)
  4. , ':'
  5. , RIGHT(CONCAT('0',( SUM(TIME_TO_SEC(ActualHours)) MOD 60)),2)
  6. ) AS `h:mm:ss`

示范
这个答案中提供的语法在mysql 5.6中是有效的。作为演示,使用用户定义的变量 @_secs 作为秒数表达式:
设置用于演示的用户定义变量:

  1. SELECT @_secs_ := ( 987 * 3600 ) + ( 5 * 60 ) + 7 ;

退货

  1. @_secs := ( 987 * 3600 ) + ( 5 * 60 ) + 7
  2. -----------------------------------------
  3. 3553507

演示查询模式:

  1. SELECT CONCAT( ( @_secs_ DIV 3600)
  2. , ':'
  3. , RIGHT(CONCAT('0',( @_secs_ DIV 60 ) MOD 60 ),2)
  4. , ':'
  5. , RIGHT(CONCAT('0',( @_secs_ MOD 60)),2)
  6. ) AS `hhh:mm:ss`

退货

  1. hhh:mm:ss
  2. ---------
  3. 987:05:07
展开查看全部
xoefb8l8

xoefb8l82#

使用一些简单的数学来计算从秒开始的时间段,用你的列替换35000。

  1. SELECT CONCAT(FLOOR(35000/3600),':',FLOOR((35000%3600)/60),':',(35000%3600)%60)

一把小提琴

qnakjoqk

qnakjoqk3#

我们有一种方法可以做到这一点:

  1. SELECT
  2. CONCAT(CAST(FLOOR(seconds / 3600) AS CHAR(50)), ':',
  3. CAST(FLOOR(60*((seconds / 3600) - FLOOR(seconds / 3600))) AS CHAR(50)), ':',
  4. CAST(seconds % 60 AS CHAR(50))) AS time
  5. FROM yourTable;

对于10000000(一千万)秒的输入,这将生成:

  1. 2777:46:40

演示

相关问题