PostgreSQL两个日期之间的差值,并以小时和分钟为单位返回

PostgreSQL两个日期之间的差值,并以小时和分钟为单位返回,postgresql,select,Postgresql,Select,您好,我想在我的PostgreSQL中返回两个日期之间的差异: START: 2016-06-01 00:00:00 END: 2016-06-06 08:35:33 预期返回值:128:35:33,格式类似于[h]:mm:ss@。如果差异超过24小时,则必须将小时相加 以下是我的SQL: SELECT EXTRACT(EPOCH FROM dt_termino::timestamp - dt_inicio::timestamp)/3600 FROM crm.task_interacao

您好,我想在我的PostgreSQL中返回两个日期之间的差异:

START: 2016-06-01  00:00:00
END: 2016-06-06  08:35:33
预期返回值:
128:35:33
,格式类似于
[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
更新

你好现在我面临另一个问题我有一张这样的桌子:

我的表在数据库中是这样的
开始结束
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; 空

我需要求和值…我正试着像你说的那样(第一个)。。我不能使用函数,因为我在php代码中使用

从crm.task\u interacao中选择SUM(COALESCE(end::timestamp,now()::timestamp)-start::timestamp,其中id\u task\u tarefa=1

但它正在回归

1102天26:07:54.864879

为什么是26小时???我最多在24岁的时候被打败了


现在返回没有问题(天HH:MM:SS)而不是毫秒

您只需减去时间戳即可获得时间间隔:

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。使用以下功能:

select date_trunc('sec', justify_hours('1102 days 26:07:54.864879'));

     date_trunc     
--------------------
 1103 days 02:07:54
(1 row)