3

我的一个表中有一个列,它是 TIME 格式 (00:00:00)。我正在尝试对整个列求和并将其显示为相同 (00:00:00)。

我尝试使用以下方法,但它并没有给我任何接近正确答案的地方。它给了我 22.12:44:00 并且手动计算告诉我它应该接近 212:something:something

从 tbl_vluchtgegevens选择 SEC_TO_TIME( SUM( vluchttijdTIME_TO_SEC( ) ) ) 作为总时间

有什么建议吗?

4

3 回答 3

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 小提琴

于 2013-08-11T19:13:15.307 回答
0

在 MySQL 中,TIME类型的范围相当有限。此外,许多时间函数不接受大于该值的值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类型限制。根据您计划如何使用该结果,这意味着您可能必须将该字符串转换为您的宿主语言中的适当类型。

于 2013-08-11T22:31:01.010 回答
0

这对我有用:

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(vluchttijd))) AS totaltime FROM tbl_vluchtgegevens;
于 2017-07-27T00:33:24.193 回答