我必须根据start_time和end_time计算postgres中事件的持续时间,两者都是HH:MM:SS格式。简单地结束时间-开始时间有效:
create table test_date as
select sum(eindtijd - starttijd) as tijdsduur
from evenementen_2019;
这将产生HH:MM:SS格式的间隔。但有时结束时间是第二天。示例:
start_time end_time duration computed
18:00 21:00 3:00 3:00
18:00 0:00 6:00 -18:00
18:00 1:00 7:00 -17:00
我只有时间没有时区,没有日期。
解决方案在概念上很简单:当持续时间<0,增加24小时。所以我尝试了:
update test_date
set duration = to_date('24:00:00', 'HHMMSS') - duration
where duration < 0 * interval '1' second;
这会产生一个错误:
错误:列"duration"的类型为interval,但表达式的类型为timestamp,不带时区
没错,我认为timestamp - interval
会产生一个时间戳。我不知道如何解决这个问题。有人知道解决这个问题的最佳方法是什么吗?
我认为时间戳间隔会产生时间戳
确实如此。然后尝试将生成的时间戳存储到类型为interval的列中,但这不起作用。
请注意,如果它在这一部分幸存下来,它仍然不会工作,因为to_date
函数调用在运行时会失败。
你说你应该加24小时,但你试图做的是从24小时中减去(错误的类型(,如果它确实有效,那就错了。
你可以逐字逐句地将你所说的你想做的事情翻译成SQL:
update test_date
set duration = duration + interval '24 hours'
where duration < 0 * interval '1' second;