基于秒数计算PostgreSQL日期差异

31

在PostgreSQL中,如何找到两个日期之间的时间差,以秒为单位?

与SQL-Server不同,没有提供以秒为单位给出日期差异的函数:

DATE_DIFF(second, '2011-12-30 09:55:56', '2011-12-30 08:54:55')

请帮助我在PostgreSQL中也实现这个。

1个回答

56

首先,日期需要是timestamp类型的值(因此,如果你只是将它们指定为字符串文字,请附加::timestamp)。

如果你减去两个时间戳,结果就是interval类型,它描述了时间的持续时间(以小时、分钟、秒等为单位)。你可以使用extract(epoch from interval_value)将时间间隔转换成绝对秒数。

因此,将所有这些放在一起:

select extract(epoch from ('2011-12-30 09:55:56'::timestamp - '2011-12-30 08:54:55'::timestamp));

请记住,::timestamp 只有在将字符串文字转换为时间戳时才需要使用:如果您正在使用时间戳列的值,则不需要它。


2
我更喜欢使用 ANSI 字面量:timestamp '2011-12-30 09:55:56',而不是将字符串值转换(主要是因为它们在几乎所有 DBMS 中都可以工作,我不必记住特定于 DBMS 的语法)。 - user330315
但是我认为转换语法受到语言设置的影响,对吧?因此,字符串文字的格式取决于系统配置? - user330315
1
我曾经认为在PostgreSQL中,cast(value as type)type valuevalue::type是等价的。当然,datestyle设置会影响解释,但我认为转换的书写方式并不相关。 - araqnid
1
此外,“type value”语法并不总是适用的:例如,date testfunc()是语法错误,而testfunc()::datecast(testfunc() as date)则不是。 - araqnid
date_part('epoch', date1::timestamp - date2::timestamp) - vilanovi
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接