在PostgreSQL中,如何找到两个日期之间的时间差,以秒为单位?
与SQL-Server不同,没有提供以秒为单位给出日期差异的函数:
DATE_DIFF(second, '2011-12-30 09:55:56', '2011-12-30 08:54:55')
请帮助我在PostgreSQL中也实现这个。
在PostgreSQL中,如何找到两个日期之间的时间差,以秒为单位?
与SQL-Server不同,没有提供以秒为单位给出日期差异的函数:
DATE_DIFF(second, '2011-12-30 09:55:56', '2011-12-30 08:54:55')
请帮助我在PostgreSQL中也实现这个。
首先,日期需要是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
只有在将字符串文字转换为时间戳时才需要使用:如果您正在使用时间戳列的值,则不需要它。
timestamp '2011-12-30 09:55:56'
,而不是将字符串值转换(主要是因为它们在几乎所有 DBMS 中都可以工作,我不必记住特定于 DBMS 的语法)。 - user330315cast(value as type)
、type value
和value::type
是等价的。当然,datestyle设置会影响解释,但我认为转换的书写方式并不相关。 - araqniddate testfunc()
是语法错误,而testfunc()::date
和cast(testfunc() as date)
则不是。 - araqniddate_part('epoch', date1::timestamp - date2::timestamp)
- vilanovi