我的一个表中有一列,它是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
有什么建议吗?
答案 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
答案 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