2012-03-09 3 views
1

Я проверка обновлений продуктов, которые зависят от времени суток - предупреждая, если продукт не обновляется в течение последних 2-х часов, например:
Sysdate против Timestamp для сравнения

03:30 - 7:29 мы ожидаем обновления только продукта x;
7:30 - 11:29 мы ожидаем, что оба продукта х и у, чтобы быть обновляя
11:30 - 15:30 мы ожидаем, что только продукт у, чтобы обновлять

Но мы должны быть чувствительны к продуктам, не обновили вчера и до сих пор не обновили сегодня. Таким образом, мой вопрос: при выполнении нижеприведенных сопоставлений времени для продукта y, я подозреваю, что дата не учитывается, и поэтому продукт, который не обновлялся, потенциально игнорируется.

(...) 
AND inv.timestamp  < sysdate  - (120/1440) --older than two hours 
AND inv.timestamp  > TRUNC(sysdate) + (690/1440) --after 11:30 
AND inv.timestamp  < TRUNC(sysdate) + (930/1440) --before 15:30 
(...) 

inv.timestamp - это столбец типа timestamp (6). Включает ли trunc (sysdate) текущую дату для сравнения или использует ли это только время?

+0

Вы можете уточнить свой вопрос? Я прочитал его так же, как 'trunc (sysdate)' - 'sysdate', являющийся 09/03/2012, включает 09/03/2012 00:00:00, и в этом случае да. – Ben

ответ

2

TRUNC(SYSDATE) возвращает 00:00:00 от текущего дня.

SQL> select trunc(sysdate) from dual; 

TRUNC(SYSDATE) 
------------------- 
2012-03-09 00:00:00 

Documentation on TRUNC

0

Как eaolson и Бен уже отмечали, SYSDATE включает в себя дату и время. Использование TRUNC «удаляет» элемент времени, т. Е. Сбрасывает его до полуночи того дня.

Возможно, вы захотите рассмотреть возможность использования функциональных возможностей INTERVAL, предоставляемых Oracle, для более четкого определения того, что делает SQL.

SELECT to_char(trunc(sysdate) + interval '11' hour + interval '30' minute,'dd/mm/yyyy hh24:mi:ss') sysdate_trunced_to_1130, 
     to_char(trunc(current_timestamp) + interval '11' hour + interval '30' minute,'dd/mm/yyyy hh24:mi:ss') timestamp_trunced_to_1130 
FROM dual; 

Взглянув на код «(690/1440)» не сразу предположить, 11:30 утром, но + интервал «11» час + интервал «30» минут, надеюсь, немного лучше.

Смежные вопросы