【问题标题】:Postregsql Date Difference on basis on seconds基于秒的 Postgresql 日期差异
【发布时间】:2012-11-29 13:28:07
【问题描述】:

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

没有像 SQL-Server 那样以秒为单位给出日期差异的函数:

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

请帮助我在 PostgreSQL 中也有这个

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    首先,日期必须是 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 仅用于将字符串文字转换为时间戳:例如,如果您使用时间戳列的值,则不需要它。

    【讨论】:

    • 我实际上更喜欢 ANSI 文字:timestamp '2011-12-30 09:55:56' 而不是转换字符串值(主要是因为它们几乎适用于所有 DBMS,我不必记住 DBMS 特定的语法)
    • 感谢 araqnid,我试图在减去时间戳后提取第二个,忘记从减去的时间戳中提取纪元。谢谢 4 完美答案。
    • @a_horse_with_no_name 好点,但不支持该语法的数据库之一是 SQL Server,我经常使用它。我一直记得cast(value as type)是标准语法,有点冗长。
    • 我的理解是,在 postgresql 中,cast(value as type)type valuevalue::type 都是等价的。当然,datestyle 设置会影响解释,我认为演员表的写作风格无关紧要。
    • 另外,type value 语法并不总是适合:例如date testfunc() 是语法错误,而 testfunc()::datecast(testfunc() as date) 不是
    猜你喜欢
    • 2021-10-26
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    相关资源
    最近更新 更多