在mysql中总结时间列

时间:2013-08-11 19:06:12

标签: mysql time

我的一个表中有一列,它是TIME格式(00:00:00)。我试图将整个列相加并显示为相同(00:00:00)。

我尝试使用以下内容,但它没有给我任何接近正确答案的地方。它给了我22.12:44:00并且手动钙化告诉我应该接近212:某事:某事

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(vluchttijd)))AS总时间FROM tbl_vluchtgegevens

有什么建议吗?

3 个答案:

答案 0 :(得分:3)

您可以尝试这样: -

SELECT SEC_TO_TIME(SUM(SECOND(vluchttijd ))) AS totaltime FROM tbl_vluchtgegevens; 

或试试这个(虽然这不是一个好方法):

SELECT concat(floor(SUM( TIME_TO_SEC( `vluchttijd ` ))/3600),":",floor(SUM( TIME_TO_SEC( `vluchttijd ` ))/60)%60,":",SUM( TIME_TO_SEC( `vluchttijd ` ))%60) AS total_time 
FROM tbl_vluchtgegevens;

修改: -

试试这个: -

select  cast(sum(datediff(second,0,dt))/3600 as varchar(12)) + ':' + 
        right('0' + cast(sum(datediff(second,0,dt))/60%60 as varchar(2)),2) +
        ':' + right('0' + cast(sum(datediff(second,0,dt))%60 as varchar(2)),2)
from    TestTable

工作SQL Fidlle

答案 1 :(得分:0)

在MySQL中,TIME type is rather limited in range。此外,许多时间函数不接受大于23:59:59的值,使其仅用于表示当天的时间

鉴于您的需求,您最好的选择可能是编写一个模仿SEC_TO_TIME的自定义函数,但允许更大的范围:

CREATE FUNCTION SEC_TO_BIGTIME(sec INT)
RETURNS CHAR(10) DETERMINISTIC
BEGIN
    SET @h = sec DIV 3600;
    SET @m = sec DIV 60 MOD 60;
    SET @s = sec MOD 60;

    RETURN CONCAT(
          LPAD(@h, 4, '0'),
          ':',
          LPAD(@m, 2, '0'),
          ':',
          LPAD(@s, 2, '0')
      );

END; 

以下是如何使用它:

create table tbl (dt time);
insert tbl values
  ('09:00:00'), ('01:00:00'), ('07:50:15'), ('12:00:00'), 
  ('08:30:00'), ('00:45:00'), ('12:10:30');

select SEC_TO_BIGTIME(sum(time_to_sec(dt))) from tbl;

产:

+--------------------------------------+
| SEC_TO_BIGTIME(SUM(TIME_TO_SEC(DT))) |
+--------------------------------------+
| 0051:15:45                           |
+--------------------------------------+

请参阅http://sqlfiddle.com/#!8/aaab8/1

请注意,结果为CHAR(10),以便克服TIME类型限制。根据您计划使用该结果的方式,这意味着您可能必须从该字符串转换为主机语言中的相应类型。

答案 2 :(得分:0)

这对我有用:

Notification