您好我想在PostgreSQL中返回两个日期之间的区别:
START: 2016-06-01 00:00:00
END: 2016-06-06 08:35:33
预期返回值:128:35:33
,格式类似于Excel中的格式[h]:mm:ss;@
。如果差异超过24小时,则必须加起来。
这是我的SQL:
SELECT EXTRACT(EPOCH FROM dt_termino::timestamp - dt_inicio::timestamp)/3600 FROM crm.task_interacao WHERE id_task_tarefa = 1
UPDATE !!!
你好,我现在面临另一个问题,我有一个这样的表:
像我这样在数据库中的表我需要总结价值....我正在尝试你所说的(第一个awnser)..我不能使用函数,因为我在PHP代码中使用
SELECT SUM(COALESCE(end :: timestamp,now():: timestamp) - start :: timestamp)FROM crm.task_interacao WHERE id_task_tarefa = 1
但正在返回
1102天26:07:54.864879
为什么26小时???我最多只能24岁......
现在没有问题返回(Days HH:MM:SS)而不是毫秒
答案 0 :(得分:2)
您可以简单地减去时间戳来获取间隔:
select '2016-06-06 08:35:33'::timestamp- '2016-06-01 00:00:00' result
result
-----------------
5 days 08:35:33
(1 row)
没有标准功能可以将结果转换为您需要的格式,但您可以编写一个:
create or replace function interval_without_days(interval)
returns interval language sql as $$
select $1- date_part('day', $1)* '1d'::interval+ date_part('day', $1)* '24h'::interval;
$$;
select interval_without_days('2016-06-06 08:35:33'::timestamp- '2016-06-01 00:00:00');
interval_without_days
-----------------------
128:35:33
(1 row)
问题#2。使用函数date_trunc(text, interval)
and justify_hours(interval)
:
select date_trunc('sec', justify_hours('1102 days 26:07:54.864879'));
date_trunc
--------------------
1103 days 02:07:54
(1 row)