在 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
我正在使用以下代码添加间隔。但是如果时间不在同一天好像就不行了
例如开始 = 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