#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. Это основная проблема здесь.