我在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).
返回所有表格行
答案 0 :(得分:2)
正如其他人所观察到的那样,您的查询在SQL术语中是正确的。因此,如果它们返回所有行,则只能得出一个结论:所有行都包含超过十天的数据。
如果这不是您所期望的 - 而且您在这里提出的问题表明它不是 - 那么您的数据一定存在问题。可能性是它是Y2K问题的变体:数据库中的数据以某种方式缺少日期的世纪元素。所以你认为26-JAN-2013在数据库中被保存为26-JAN-0013(或者可能 - 不太可能 - 1913年1月26日)。显然这是十多天前的事了。
你可以很容易地检查是否是这种情况:
select distinct to_char(your_date, 'CC') from your_table;
如果我是对的,这将不会返回21
。那么问题就变成了,为什么数据库中的所有日期都有错误的世纪?对于编写数据输入子系统的开发人员来说,这是一个问题。