在PostgreSQL中添加负间隔



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

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

代码

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

问题

如果我加上:end=01:00,start=23:00,那么它会在和中加上一个负数和false。因为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

相关内容

  • 没有找到相关文章

最新更新