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

时间:2019-10-10 17:04:55

标签: sql oracle

在我的查询中,我只需要返回该函数返回的大于另一个日期的那些记录。我正在比较的字段是时间戳,而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的记录,但确实会返回记录。我该怎么做才能使比较更细化?

1 个答案:

答案 0 :(得分:0)

来自Datetime and Interval Arithmetic

  

Oracle数据库以UTC时间执行所有时间戳算术。对于   TIMESTAMP WITH LOCAL TIME ZONE数据,Oracle数据库将   从数据库时区到UTC的datetime值,并转换回   执行算术运算后的数据库时区。对于TIMESTAMP WITH TIME ZONE数据,datetime值始终为UTC,因此没有   转换是必要的。

如果提供一个DATETIMESTAMP值(即没有任何时区信息的值),则Oracle将SESSIONTIMEZONE附加到该值,然后根据UTC进行比较。

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