oracle 10g查询时间戳

时间:2013-01-27 17:15:01

标签: oracle oracle10g date-arithmetic

我在Oracle 10 DB中具有列act_start timestamp(6)的表中遇到问题。 我想获得超过10天的所有行(act_start字段值超过当天10天的行)但我失败了。

我尝试了不同的查询,但它们不起作用

例如:

select act_start 
  from wfmactionstates_tab 
 where act_start < (systimestamp -10).

返回所有表行;

select * 
  from wfmactionstates_tab 
 where cast(act_start as date) < (sysdate -10).

返回所有表格行

1 个答案:

答案 0 :(得分:2)

正如其他人所观察到的那样,您的查询在SQL术语中是正确的。因此,如果它们返回所有行,则只能得出一个结论:所有行都包含超过十天的数据

如果这不是您所期望的 - 而且您在这里提出的问题表明它不是 - 那么您的数据一定存在问题。可能性是它是Y2K问题的变体:数据库中的数据以某种方式缺少日期的世纪元素。所以你认为26-JAN-2013在数据库中被保存为26-JAN-0013(或者可能 - 不太可能 - 1913年1月26日)。显然这是十多天前的事了。

你可以很容易地检查是否是这种情况:

select distinct to_char(your_date, 'CC') from your_table;

如果我是对的,这将不会返回21。那么问题就变成了,为什么数据库中的所有日期都有错误的世纪?对于编写数据输入子系统的开发人员来说,这是一个问题。