我试图获取数据库中所有记录,这些记录的更新日期介于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
基本上第一个是在另外两个之间,所以查询应该返回一条记录,但它不会。有什么帮助吗?
答案 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