Как измерить время интервала из двух отдельных времен с помощью postgresql

#postgresql #time #intervals

#postgresql #время #интервалы

Вопрос:

У меня есть несколько полей столбца соответственно pid (первичный ключ), login, logout, interval_time, today (current_date)

типы данных для входа и выхода из системы (время без часового пояса)

Здесь данные для входа и выхода из системы, такие как 10:00:45, 12:45:12, 07: 32:02( не нравится 14:32:12, 18:65:78, 23:51:00)

Поэтому я не могу понять, когда ночь или день, или вечер или утро.

 If someone login = 07:00:00 and logout = 11:00:00
again he/she login = 01:00:00
that means here interval_time will be 2 hours. Exactly how much time he/she was inactive.
  

Я написал триггер

 create or replace function interval_time()
returns trigger as
$BODY$
    begin
        if new.login or new.logout then
            if new.login then
                update employee set interval_time = new.logout::time - login::time where pid = new.pid; -- employee is my table name;
                return new;
            end if;
        end if;
    end;
$BODY$
language plpgsql;
  

этот триггер просто образец, он не работает.

 create trigger employee_changer
before update
on employee
for each row
execute procedure employee_change()

Please let me know if you have any question.
Any help would be appreciated. 
Thanks.
  

Комментарии:

1. Не используйте update в функции запуска, просто присвоите значение: new.interval_time := new.logout - new.login; — но нет необходимости хранить эту информацию, поскольку ее можно легко (и дешево) получить из существующих данных.

2. но я получаю interval_time = 10:00:00. если 10:00:00 — 01:00:00 здесь точный результат будет равен 03:00:00. Это основная проблема здесь.