【问题标题】:Adding negative Intervals in PostgreSQL在 PostgreSQL 中添加负间隔
【发布时间】:2021-04-08 00:18:58
【问题描述】:

我正在使用以下代码来添加间隔。但是如果时间不在同一天,它似乎不起作用。

例如开始 = 23:00 和结束 = 01:00

代码

SELECT extract(epoch from SUM(end - start)::interval) FROM table GROUP BY column

问题

如果我添加:end = 01:00 和 start = 23:00,那么它将在总和中添加一个负数和假数。 因为 01:00 - 23:00 是 -22:00。但是,正确的结果应该是 2:00,因为 23:01 和 01:00 之间有两个小时。

【问题讨论】:

  • start和end的数据类型是什么?
  • @GMB 数据类型是时间

标签: sql postgresql datetime case date-arithmetic


【解决方案1】:

您可以使用case 表达式。而不是:

end - start

您可以像这样将 24 小时添加到负间隔:

case when end >= start 
    then end - start 
    else (end - start) + interval '24 hour'
end

请注意,不需要将时间减法的结果转换为间隔 - 它已经是。

在您的查询中:

select col,
    extract(epoch from sum(
        case when end >= start 
            then end - start 
            else (end - start) + interval '24 hour'
        end
    )) as res
from mytable 
group by col

【讨论】:

    猜你喜欢
    • 2016-12-16
    • 2012-07-02
    • 1970-01-01
    • 2013-10-01
    • 2019-07-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 2011-09-20
    相关资源
    最近更新 更多