在我的查询中,我只需要返回该函数返回的大于另一个日期的那些记录。我正在比较的字段是时间戳,而date函数返回的是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返回该ID的记录,但确实会返回记录。我该怎么做才能使比较更细化?
答案 0 :(得分:0)
来自Datetime and Interval Arithmetic
Oracle数据库以UTC时间执行所有时间戳算术。对于
TIMESTAMP WITH LOCAL TIME ZONE
数据,Oracle数据库将 从数据库时区到UTC的datetime值,并转换回 执行算术运算后的数据库时区。对于TIMESTAMP WITH TIME ZONE
数据,datetime值始终为UTC,因此没有 转换是必要的。
如果提供一个DATE
或TIMESTAMP
值(即没有任何时区信息的值),则Oracle将SESSIONTIMEZONE
附加到该值,然后根据UTC进行比较。
为输入值附加SESSIONTIMEZONE
可能正确与否,这取决于您当前的会话和MyFunction1
的内容