PostgreSQL两个日期之间的差值,并以小时和分钟为单位返回
您好,我想在我的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
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)