【问题标题】:Difference between two timestamps as timestamp across multiple days两个时间戳之间的差异作为多天的时间戳
【发布时间】:2018-07-25 23:01:17
【问题描述】:

我有两个时间戳,我希望得到它们之间的差异结果。我发现了一个类似的问题问here,但我注意到:

select 
 to_char(column1::timestamp - column2::timestamp, 'HH:MS:SS')
from
 table

如果这些时间戳跨越多天,则返回不正确。我知道我可以使用 EPOCH 来计算小时/天/分钟/秒等的数量,但我的用例需要将结果作为时间戳(或字符串......任何不是间隔!)。

在多天的情况下,我想继续计算小时数,即使它应该超过 24。这将允许结果如下:

36:55:01

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    我会使用内置的 date_part 函数(如之前在旧线程中所述:How to convert an interval like "1 day 01:30:00" into "25:30:00"?),但最终将结果转换为您想要的类型:

    SELECT
       from_date,
       to_date,
       to_date - from_date as date_diff_interval,
       (date_part('epoch', to_date - from_date) * INTERVAL '1 second')::text as date_diff_text
    from (
       (select
        '2018-01-01 04:03:06'::timestamp as from_date,
        '2018-01-02 16:58:07'::timestamp as to_date)
    ) as dates;
    

    这会导致以下结果:

    我目前不知道有什么方法可以将此间隔转换为时间戳,也不确定它是否有用。您仍在处理一个时间间隔,您需要一个及时的参考点将该时间间隔转换为实际时间戳。

    【讨论】:

    • 当我在自己的桌子上运行它时,这似乎产生了我正在寻找的东西。我根本不熟悉 PGSQL,我的部分问题是我真的不明白“间隔”类型是什么,超出了它返回一个我不想在 javascript 中迭代的对象的事实。感谢您的回答,这将使我的用例走很长一段路
    猜你喜欢
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 2020-05-13
    相关资源
    最近更新 更多