与systimestamp相比

时间:2014-08-20 18:24:34

标签: sql oracle

我正在尝试使用以下查询在过去一小时内更新所有记录。

select * from myTable where update_time > systimestamp - interval '1' hour;

我非常确定systimestamp占用了数据库的时区,而不是我机器的时区(我在CDT(-5),数据库是UTC)。当我运行上述查询时,它会在过去6小时内给出结果。更有趣的是,我使用以下结果运行此查询:

select systimestamp, update_time from myTable where update_time > systimestamp - interval '1' hour order by update_time asc;

SYSTIMESTAMP                           UPDATE_TIME                   
-------------------------------------- -------------------------------
20-AUG-14 05.27.34.534438000 PM +00:00 20-AUG-14 11.27.53.882180000 AM 
20-AUG-14 05.27.34.534438000 PM +00:00 20-AUG-14 11.33.47.677019000 AM 
20-AUG-14 05.27.34.534438000 PM +00:00 20-AUG-14 11.40.24.751760000 AM 
20-AUG-14 05.27.34.534438000 PM +00:00 20-AUG-14 11.43.03.276697000 AM 
20-AUG-14 05.27.34.534438000 PM +00:00 20-AUG-14 11.44.26.439896000 AM 
20-AUG-14 05.27.34.534438000 PM +00:00 20-AUG-14 11.53.17.772865000 AM 
20-AUG-14 05.27.34.534438000 PM +00:00 20-AUG-14 11.53.51.116485000 AM 
...

为什么我会看到这些结果?

更新:这些查询有效:

select * from myTable where FROM_TZ(update_time, 'UTC') > systimestamp - interval '1' hour;
select * from myTable where update_time > CAST(systimestamp AS TIMESTAMP) - interval '1' hour;

我的问题,更具体地说,是如何让系统默认将时间戳值解释为UTC(甚至更好,在DB时区中解释它),而不是解释我机器当地时间的时间戳?

0 个答案:

没有答案