在 PostgreSQL 中添加负间隔

Adding negative Intervals in PostgreSQL

我正在使用以下代码添加间隔。但是如果时间不在同一天好像就不行了

例如开始 = 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 之间有两个小时。

您可以使用 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