Запрос Oracle между двумя временными метками не возвращает записи - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь получить все записи в базе данных, которые имеют дату обновления между интервалом systimestamp -15 минут и текущей systimestamp.

Итак, что я делаю:

and (CAST (update_date AS TIMESTAMP)  at time zone 'UTC') BETWEEN  (cast((systimestamp - interval '15' minute) at time zone 'UTC' as timestamp)) AND  (cast((systimestamp) at time zone 'UTC' as timestamp))

Если я возьму их отдельно для конкретной записи:

(CAST (update_date AS TIMESTAMP)  at time zone 'UTC') -> 26-APR-18 01.10.16.000000000 AM UTC
(cast((systimestamp - interval '15' minute) at time zone 'UTC' as timestamp)) -> 26-APR-18 12.57.04.136000000 AM
(cast((systimestamp) at time zone 'UTC' as timestamp)) -> 26-APR-18 01.12.04.136000000 AM

В основном первый находится между двумя другими, поэтому запрос должен вернуть запись, но это не так. Любая помощь?

1 Ответ

0 голосов
/ 26 апреля 2018

SYSTIMESTAMP возвращает значение TIMESTAMP WITH TIME ZONE.

Предполагая, что update_date также TIMESTAMP WITH TIME ZONE, вам вообще не нужен каст, просто запустите

update_date BETWEEN SYSTIMESTAMP - interval '15' minute AND SYSTIMESTAMP

Сравнения всегда выполняются внутри UTC, см. Дата-время и интервальная арифметика :

База данных Oracle выполняет всю арифметику меток времени в формате UTC. За TIMESTAMP с данными локальной зоны времени, база данных Oracle преобразует значение datetime из часового пояса базы данных в UTC и преобразует обратно в часовой пояс базы данных после выполнения арифметики. Для TIMESTAMP Для данных TIME ZONE значение datetime всегда указывается в формате UTC, поэтому нет необходимо преобразование.

Поскольку у вас есть DATE значения в PST (примечание, как вы справляетесь с переходом на летнее время в этом случае?), Вы должны запустить

FROM_TZ(CAST(update_date AS TIMESTAMP), 'PST') BETWEEN SYSTIMESTAMP - interval '15' minute AND SYSTIMESTAMP
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...