Excel格式的postgresql两个日期之间的差异
您好,我想显示两个日期之间的SQL差异: *结束日期=终止日期/现在 *开始日期=dt_inicio 我有一个函数写在CSV。。。但在我的csv输出中: 我需要一个格式输出到Excel[h]:mm:ss@ 像这样Excel格式的postgresql两个日期之间的差异,postgresql,csv,Postgresql,Csv,您好,我想显示两个日期之间的SQL差异: *结束日期=终止日期/现在 *开始日期=dt_inicio 我有一个函数写在CSV。。。但在我的csv输出中: 我需要一个格式输出到Excel[h]:mm:ss@ 像这样 id_task_tarefa | dt_inicio | dt_termino | sum 211 | 2016-01-25 10:40:25 | 2016-01-27 08:51:02 | 46:10:37 210
id_task_tarefa | dt_inicio | dt_termino | sum
211 | 2016-01-25 10:40:25 | 2016-01-27 08:51:02 | 46:10:37
210 | 2016-01-25 10:40:29 | 2016-01-27 08:50:21 | 46:09:52
以下是我的SQL:
SELECT id_task_tarefa,
dt_inicio,
dt_termino,
to_char(COALESCE(dt_termino::timestamp, now()::timestamp)
- dt_inicio::timestamp,'DD HH24:MI:SS')
FROM crm.task_interacao
不确定是否有更好的方法,但有效
SELECT '2016-01-25 10:40:25' start_date,
'2016-01-27 08:51:02' end_date,
to_char('2016-01-27 08:51:02'::timestamp
- '2016-01-25 10:40:25'::timestamp,'HH24:MI:SS') as sum_text,
TRUNC(EXTRACT(epoch FROM '2016-01-27 08:51:02'::timestamp - '2016-01-25 10:40:25'::timestamp)/3600) time_diff,
TRUNC(EXTRACT(epoch FROM '2016-01-27 08:51:02'::timestamp - '2016-01-25 10:40:25'::timestamp)/3600) || ':' ||
to_char('2016-01-27 08:51:02'::timestamp
- '2016-01-25 10:40:25'::timestamp,'MI:SS') result
输出
不确定是否有更好的方法,但有效
SELECT '2016-01-25 10:40:25' start_date,
'2016-01-27 08:51:02' end_date,
to_char('2016-01-27 08:51:02'::timestamp
- '2016-01-25 10:40:25'::timestamp,'HH24:MI:SS') as sum_text,
TRUNC(EXTRACT(epoch FROM '2016-01-27 08:51:02'::timestamp - '2016-01-25 10:40:25'::timestamp)/3600) time_diff,
TRUNC(EXTRACT(epoch FROM '2016-01-27 08:51:02'::timestamp - '2016-01-25 10:40:25'::timestamp)/3600) || ':' ||
to_char('2016-01-27 08:51:02'::timestamp
- '2016-01-25 10:40:25'::timestamp,'MI:SS') result
输出
该功能可能对您很方便:
create or replace function interval_in_hours(interval)
returns text language sql as $$
select format('%s:%s',
(extract (epoch from $1) / 3600)::int,
to_char($1, 'mi:ss'))
$$;
使用:
该功能可能对您很方便:
create or replace function interval_in_hours(interval)
returns text language sql as $$
select format('%s:%s',
(extract (epoch from $1) / 3600)::int,
to_char($1, 'mi:ss'))
$$;
使用:
考虑TimeSTAMP1-TimeSTP2中的ExtPoPoCH返回两个时间戳之间的第二个数。然后您可以使用简单的公式将其转换为小时、分钟和秒:x::int/60*60作为h,x::int%60*60/60作为m,x::int%60作为从时间戳1提取历元的sConsider-时间戳2返回两个时间戳之间的秒数。然后,您可以使用简单的公式将其转换为小时、分钟和秒:x::int/60*60为h,x::int%60*60/60为m,x::int%60为sI,您想知道为什么返回文本而不返回间隔?现在我看到interval显示了正确的格式,将different转换为interval不是很容易解决吗?函数返回类似于字符、格式等的文本。将其更改为interval没有问题。在本例中,我将结果强制转换为interval,以确保格式正确,但是这是不必要的,当然我可以在没有任何视觉差异的情况下留下文本。奇怪的部分是'46:09:52'::interval返回46:09:52而不是01 22:10:37在这种情况下,也许有一种方法可以将timestamp-timestamp::interval直接转换为我们想要的格式。没有什么奇怪的,间隔“20:00:00”+间隔“20:00:00”给出“40:00:00”。这里有一个函数,可以用“1天16:00:00”代替。据我所知,没有一个标准的反转函数。你怎么不觉得奇怪+产生40:00:00但是-产生01 22:10:37??我想知道你为什么返回文本而不是返回间隔?现在我看到interval显示了正确的格式,将different转换为interval不是很容易解决吗?函数返回类似于字符、格式等的文本。将其更改为interval没有问题。在本例中,我将结果强制转换为interval,以确保格式正确,但是这是不必要的,当然我可以在没有任何视觉差异的情况下留下文本。奇怪的部分是'46:09:52'::interval返回46:09:52而不是01 22:10:37在这种情况下,也许有一种方法可以将timestamp-timestamp::interval直接转换为我们想要的格式。没有什么奇怪的,间隔“20:00:00”+间隔“20:00:00”给出“40:00:00”。这里有一个函数,可以用“1天16:00:00”代替。据我所知,没有标准的反转功能。你怎么不觉得奇怪+生产40:00:00但是-生产01 22:10:37??