PostgreSQL两个日期之间的差异,以小时和分钟返回

时间:2016-06-08 13:04:00

标签: postgresql select

您好我想在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 !!!

你好,我现在面临另一个问题,我有一个这样的表:

像我这样在数据库中的表
开始;结束 2013-06-01 09:29:33; 2016-06-07 14:08:19
2016-06-07 14:22:09; 2016-06-07 14:22:43
2016-06-07 14:22:51;空

我需要总结价值....我正在尝试你所说的(第一个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)而不是毫秒

1 个答案:

答案 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)