当结束时间有时超过午夜时,如何在postgresql中计算两次之间的持续时间



我必须根据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; 

最新更新