您正在将SYSTIMESTAMP
哪种TIMESTAMP WITH TIME ZONE
数据类型与TIMESTAMP(6)
数据类型进行比较;这需要转换为时区。
如果您使用:
SELECT SESSIONTIMEZONE FROM DUAL;
您可以看到您的会话使用的时区。
在 db<>fiddle 上,默认值为 UTC (+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
输出:
| 查询1 |
| :----- |
| 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
然后输出有零行:
| 查询2 |
| :----- |
如果要在转换中手动设置时区,则可以使用以下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
再次输出零行:
| 查询3 |
| :----- |
db<>在这里摆弄