Вы сравниваете SYSTIMESTAMP
, который имеет тип данных TIMESTAMP WITH TIME ZONE
, с типом данных TIMESTAMP(6)
; для этого требуется преобразование в часовой пояс.
Если вы используете:
SELECT SESSIONTIMEZONE FROM DUAL;
Вы можете увидеть часовой пояс, который использует ваш сеанс.
On db <> fiddle, по умолчанию UT C (+00: 00) и работает:
SELECT DUMMY AS query1
FROM DUAL
WHERE TIMESTAMP '2020-03-11 06:06:00.070695 -05:00' > TIMESTAMP '2020-03-11 06:05:50.781167' + INTERVAL '5' MINUTE
Выходы:
| QUERY1 |
| :----- |
| X |
Поскольку 2020-03-11 06:06:00.070695 -05:00
больше чем 2020-03-11 06:10:50.781167 +00:00
.
Если вы измените часовой пояс сеанса:
ALTER SESSION SET TIME_ZONE = '-05:00';
и снова выполните тот же запрос (другой псевдоним столбца использовался для предотвращения кэширования):
SELECT DUMMY AS query2
FROM DUAL
WHERE TIMESTAMP '2020-03-11 06:06:00.070695 -05:00' > TIMESTAMP '2020-03-11 06:05:50.781167' + INTERVAL '5' MINUTE
Тогда выходные данные имеют нулевые строки:
| QUERY2 |
| :----- |
Если вы хотите вручную установить часовой пояс в преобразовании, тогда вы можете использовать функцию FROM_TZ
:
SELECT DUMMY AS query3
FROM DUAL
WHERE TIMESTAMP '2020-03-11 06:06:00.070695 -05:00' > FROM_TZ( TIMESTAMP '2020-03-11 06:05:50.781167', '-05:00' ) + INTERVAL '5' MINUTE
, который, опять же, выводит нулевые строки:
| QUERY3 |
| :----- |
db <> fiddle здесь