2016-05-11 3 views
3

У меня есть следующий сценарий:Как вычитать/добавить минуты с отметкой времени в PostGreSQL

У меня есть сотрудники, которые регистрируют их проверку в/из их работы. Но у них есть 10 минут терпимости.

В конце записи я с этой точкой зрения:

CREATE OR REPLACE VIEW employees_late_entries 
(
    id, 
    created_datetime, 
    entry_datetime, 
    contact_id, 
    contact_name, 
    user_id, 
    employees_perm_id 
) 
AS 
SELECT precence_records.id, 
    precence_records.created AS created_datetime, 
    ("substring"(precence_records.created::text, 0, 11) || ' '::text) || contacts.entry_time::text AS entry_datetime, 
    contacts.id AS contact_id, 
    contacts.name AS contact_name, 
    precence_records.user_id, 
    precence_records.employees_perm_id 
    FROM precence_records, 
    contacts 
    WHERE 
    precence_records.type::text = 'entry'::text AND 
    contacts.employee = true AND 
    contacts.id = precence_records.contact_id AND 
    (("substring"(precence_records.created::text, 0, 11) || ' '::text) || contacts.entry_time::text) < precence_records.created::text AND 
    precence_records.employees_perm_id IS NULL; 

precence_records.created является проверка времени и contacts.entry_time его время от времени ввода расписания для сотрудника.

Это condition contacts.entry_time против precence_records.created получить поздние записи:

(("substring"(precence_records.created::text, 0, 11) || ' '::text) || contacts.entry_time::text) < precence_records.created::text 

Так что я хочу сделать что-то вроде этого:

( ("substring"(precence_records.created::text, 0, 11) || ' '::text) || (contacts.entry_time::text + 10 MINUTES) ) < precence_records.created::text 

типы данных:

precence_records.created TIMESTAMP contacts.entry_time VARCHAR

Можете ли вы помочь мне, пожалуйста

+0

Что такое формат столбца 'entry_time'? И почему вы не используете для этого тип данных 'time'? И зачем вам нужен дополнительный столбец времени, если 'created' уже содержит дату ** и ** время?' –

+0

entry_time - VARCHAR – juanpscotto

+0

Да, но что такое _format_ _values_ там (и снова: ** почему ** 'varchar'?) –

ответ

2

даты, времени и Timestamps в PostgreSQL могут быть добавлены/вычтено значение Interval:

SELECT now()::time - INTERVAL '10 min' 

Если поле временная метка VARCHAR, вы можете бросить его первым типом данных временной метки а затем вычесть интервал:

((left(precence_records.created::text, 11) || ' ') || 
    (contacts.entry_time::time + INTERVAL '10min')::text)::timestamp < 
precence_records.created::timestamp 
Смежные вопросы