两个时间戳之间的Oracle查询没有返回记录

时间:2018-04-26 16:28:57

标签: oracle systimestamp

我试图获取数据库中所有记录,这些记录的更新日期介于systimestamp -15分钟之间,与当前systimestamp之间。

所以我所做的是:

and (CAST (update_date AS TIMESTAMP)  at time zone 'UTC') BETWEEN  (cast((systimestamp - interval '15' minute) at time zone 'UTC' as timestamp)) AND  (cast((systimestamp) at time zone 'UTC' as timestamp))

如果我将它们分开以获取特定记录:

(CAST (update_date AS TIMESTAMP)  at time zone 'UTC') -> 26-APR-18 01.10.16.000000000 AM UTC
(cast((systimestamp - interval '15' minute) at time zone 'UTC' as timestamp)) -> 26-APR-18 12.57.04.136000000 AM
(cast((systimestamp) at time zone 'UTC' as timestamp)) -> 26-APR-18 01.12.04.136000000 AM

基本上第一个是在另外两个之间,所以查询应该返回一条记录,但它不会。有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

SYSTIMESTAMP会返回TIMESTAMP WITH TIME ZONE值。

假设update_date也是TIMESTAMP WITH TIME ZONE,您根本不需要任何演员表,只需运行

update_date BETWEEN SYSTIMESTAMP - interval '15' minute AND SYSTIMESTAMP

比较总是在UTC内部完成,请参阅Datetime and Interval Arithmetic

  

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

正如你在DATE中有PST个值(nb,在这种情况下你如何处理夏令时?)你会运行

FROM_TZ(CAST(update_date AS TIMESTAMP), 'PST') BETWEEN SYSTIMESTAMP - interval '15' minute AND SYSTIMESTAMP