如何转换,如“01:30:001天”到“25:30:00”的时间间隔?
我需要添加一些间隔,使用该结果在Excel中。如何转换,如“01:30:001天”到“25:30:00”的时间间隔?
由于
sum(time.endtime-time.starttime)
返回的时间间隔为“01:30:001天”,而此格式打破我的Excel工作表,我想那会是不错的,如“25:30的输出: 00“,但在PostgreSQL文档中找不到方法。
这里任何人都可以帮我吗?
由于没有为主题的精确解:
=> SELECT date_part('epoch', INTERVAL '1 day 01:30:00') * INTERVAL '1 second' hours;
hours
-----------
25:30:00
(1 row)
我可以跟(解析的天数,增加24每次小时旁)的唯一事情是:
mat=> select date_part('epoch', '01 day 1:30:00'::interval);
date_part
-----------
91800
(1 row)
它会给你的秒数,这可能是OK的Excel中。
你可以使用EXTRACT
的间隔转换成秒。
SELECT EXTRACT(EPOCH FROM INTERVAL '5 days 3 hours');
Result: 442800
然后,你需要做自己的数学(或让Excel做它)。
注意“1天”不一定等同于'24小时 - PostgreSQL的处理之类的东西跨越DST过渡的间隔。
在带时区的(时间戳|日期|时间)中,是的,但是,嗡嗡声,时间间隔没有关于何时发生的概念,所以它没有DST转换或闰秒含义。 – mat 2008-12-04 17:37:50
osm =>选择'2008-03-29T02:00:05 + 0200':: timestamptz +'1 day':: interval; ?列? ------------------------ 2008-03-30 01:00:05 + 01 (1 row) – mat 2008-12-04 17:39:56
我无法权威在这个问题上,但似乎Postgres将间隔存储为一组字段,而不仅仅是一个转换为显示的整数。根据应用的位置不同,它会被解释为不同的秒数。抢夺上下文意味着它必须做出假设。 – slim 2008-12-04 17:47:55
在标准SQL中,你要代表类型为间隔小时到第二位,但你有型区间一天中的值第二。你不能使用CAST来达到你所要求的结果吗?在Informix中,符号将是任一的:
SUM(time.endtime - time.starttime)::INTERVAL HOUR(3) TO SECOND
CAST(SUM(time.endtime - time.starttime) AS INTERVAL HOUR(3) TO SECOND)
前者是,AFAIK,Informix的特定符号(或,至少,不标准);后者是,我相信,SQL标准符号。
这是可以做到的,但我认为,唯一的办法就是通过以下的怪物(假设你的时间间隔列名是“TI”):
select
to_char(floor(extract(epoch from ti)/3600),'FM00')
|| ':' || to_char(floor(cast(extract(epoch from ti) as integer) % 3600/60), 'FM00')
|| ':' || to_char(cast(extract(epoch from ti) as integer) % 60,'FM00')
as hourstamp
from whatever;
看到了吗?我告诉你这是可怕:)
这本来是很高兴地认为
select to_char(ti,'HH24:MI:SS') as hourstamp from t
会的工作,但可惜的是,HH24格式不“吸收”溢出超过24以上来(从内存重建)从我曾经写的一些代码。为了避免冒犯那些娇弱的体质,我封装上述有心计的观点...
如果你想Postgres的处理HH:MM:SS格式为你,走差异化的新纪元的秒数,并将其转换为间隔秒缩放:
SELECT SUM(EXTRACT(EPOCH FROM time.endtime) - EXTRACT(EPOCH FROM time.starttime))
* INTERVAL '1 SECOND' AS hhmmss
伟大的东西。我需要某种方式从一个时间间隔中获取绝对值,我需要的第一步是将时间间隔“投”到秒,这只是诀窍:)`SELECT * FROM表 ORDER BY abs(date_part('epoch', ('2011-07-19 02:40:05' - table.time)))` – Boro 2012-12-19 09:51:04