【问题标题】:oracle 10g query against timestamp [closed]oracle 10g查询时间戳[关闭]
【发布时间】:2013-01-11 01:48:59
【问题描述】:

我在查询 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).

返回所有表格行

【问题讨论】:

  • 您确实需要提供一些测试数据+输出,因为您的 SQL 是正确的。还显示select systimestamp from dual的输出
  • 你也可以使用&lt; systimestamp - interval '10' day,但你所拥有的应该可以工作。

标签: oracle oracle10g date-arithmetic


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 非常感谢。你说的对。日期字段以错误的格式存储 0013 而不是 2013
  • @user2015886 - 如果这是正确答案,那么您应该将其标记为:meta.stackexchange.com/a/5235
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 2013-10-31
  • 1970-01-01
  • 2021-07-24
  • 2011-07-14
相关资源
最近更新 更多