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