Как рассчитать продолжительность между двумя разами в postgresql, когда время окончания иногда превышает полночь - PullRequest
0 голосов
/ 07 марта 2020

Мне нужно вычислить продолжительность событий в postgres на основе start_time и end_time, оба в формате ЧЧ: ММ: СС. Просто end_time - start_time работает:

create table test_date as
    select sum(eindtijd - starttijd) as tijdsduur
    from evenementen_2019;

Это приводит к интервалу в формате ЧЧ: ММ: СС. Но иногда end_time на следующий день. Примеры:

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 часа. Поэтому я попытался: </p>

update test_date
    set duration = to_date('24:00:00', 'HHMMSS') - duration 
    where duration < 0 * interval '1' second; 

Это приводит к ошибке:

ОШИБКА: столбец "duration" имеет тип интервал, но выражение имеет тип отметки времени без часового пояса

Это верно, и я подумал, что timestamp - interval дает метку времени. Я в недоумении, как решить эту проблему. Кто-нибудь знает, как лучше решить эту проблему?

1 Ответ

2 голосов
/ 07 марта 2020

Я думал, что интервал метки времени дает метку времени

Да. И затем вы пытаетесь сохранить полученную метку времени в столбце типа интервал, который не работает.

Обратите внимание, что если он выживет в этой части, он все равно не будет работать, потому что ваш вызов функции to_date не будет выполнен во время выполнения.

Вы говорите, что должны добавить 24 часа, но вы пытаетесь вычесть из 24 часов (неправильного типа), что было бы неправильно, если бы это сработало.

Вы можете переведите то, что вы сказали, что вы хотите сделать почти слово в слово, в SQL:

update test_date
    set duration =  duration + interval '24 hours'
    where duration < 0 * interval '1' second; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...