Проблема сравнения метки времени с датой в Oracle - PullRequest
0 голосов
/ 10 октября 2019

В моем запросе мне нужно вернуть только те записи, которые превышают другую дату, возвращенную функцией. Поле, которое я сравниваю, является меткой времени, а функция даты возвращает тип DATE.

Мой запрос:

SELECT * FROM TABLE1
WHERE MY_TIMESTAMP > MyFunction1('Test Date');

, когда я сравниваю два значения, в которых только время немного отличается -в минутах или секундах сравнение не работает.

Например, когда

MY_TIMESTAMP=11/27/2018 12:15:42.000000 PM -05:00

и

MyFunction1('Test Date') returns 11/27/2018 12:22:00 PM

не следует возвращать запись из TABLE1 для этого идентификатора, кромезапись возвращается. Что я могу сделать, чтобы сделать сравнение более детальным?

1 Ответ

0 голосов
/ 10 октября 2019

С Арифметика даты и времени

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

Если вы указали значение DATE или TIMESTAMP (т.е. значение без какой-либо информации о часовом поясе)затем Oracle присоединяет SESSIONTIMEZONE к этому значению, а затем выполняет сравнение на основе UTC.

Присоединение SESSIONTIMEZONE к входному значению может быть правильным или нет, это зависит от текущего сеанса и содержимого MyFunction1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...