Sql 在Oracle中比较时间戳和日期的问题

Sql 在Oracle中比较时间戳和日期的问题,sql,oracle,Sql,Oracle,在我的查询中,我只需要返回那些大于函数返回的另一个日期的记录。我比较的字段是时间戳,日期函数返回的是日期类型 我的问题是: SELECT * FROM TABLE1 WHERE MY_TIMESTAMP > MyFunction1('Test Date'); 当我比较两个只有时间略有不同的值时——以分钟或秒为单位,比较不起作用 例如当 MY_TIMESTAMP=11/27/2018 12:15:42.000000 PM -05:00 及 对于该ID,不应从表1中返回任何记录,但会返回该

在我的查询中,我只需要返回那些大于函数返回的另一个日期的记录。我比较的字段是时间戳,日期函数返回的是日期类型

我的问题是:

SELECT * FROM TABLE1
WHERE MY_TIMESTAMP > MyFunction1('Test Date');
当我比较两个只有时间略有不同的值时——以分钟或秒为单位,比较不起作用

例如当

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

对于该ID,不应从表1中返回任何记录,但会返回该记录。我能做些什么使比较更精确?

来自

Oracle数据库以UTC时间执行所有时间戳算法。对于
带有本地时区的时间戳
数据,Oracle数据库将 datetime值从数据库时区转换为UTC,并转换回UTC 执行该算法后的数据库时区。对于带有时区数据的时间戳,datetime值始终以UTC为单位,因此没有 转换是必要的

如果您提供一个
日期
时间戳
值(即没有任何时区信息的值),则Oracle会将
会话时区
附加到该值,然后基于UTC进行比较


SESSIONTIMEZONE
附加到输入值可能正确与否,这取决于您当前的会话和
MyFunction1

的内容时间戳是否影响时区。您需要执行一些操作来消除时区,但我认为它存在是有原因的。
时间戳
没有时区。带有时区的
时间戳
或带有本地时区的
时间戳
不起作用。您的示例显示了一个时区,因此我猜测
my_timestamp
是一个带有时区的
时间戳
,但在三种不同的情况下,答案略有不同。类型是带有时区的timestamp(6)emyFunction 1返回类型DATE的值:
1/27/2018 12:22:00 PM
MyFunction1('Test Date') returns 11/27/2018 12:22:00 PM