0

act_start timestamp(6)我在从具有Oracle 10 DB 中的列的表中查询时遇到问题。我想获取所有超过 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).

返回所有表行

4

1 回答 1

2

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

如果这不是您所期望的——而您在这里提出的问题表明事实并非如此——那么您的数据一定有问题。它很可能是 Y2K 问题的一个变体:不知何故,您的数据库中的数据缺少日期的世纪元素。因此,您认为 26-JAN-2013 在数据库中保存为 26-JAN-0013(或者可能 - 不太可能 - 26-JAN-1913)。显然那是十多天前的事了。

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

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

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

于 2013-01-27T21:34:50.950 回答