【问题标题】:How do you retrieve last day's of data from Oracle table?如何从 Oracle 表中检索前一天的数据?
【发布时间】:2015-04-07 02:57:50
【问题描述】:

我有一个 oracle 数据库,我想检索过去几天或过去 10 分钟的数据:

我首先使用这个命令:

alter session set nls_date_format='dd-mm-yyyy hh24:mi:ss'

然后这个:

select TIMESTAMP, TARGET_NAME, TARGET_TYPE, COLUMN_LABEL, VALUE, KEY_VALUE from METRIC_TABLE where TIMESTAMP > sysdate -1

这个命令没有给我最后几天的数据,它只给我最后几个小时的数据。我怀疑 TIMESTAMP 列不是 Oracle 数据时间格式。

在执行此操作之前有没有办法将 TIMESTAMP 格式化为 Oracle 时间戳格式:

TIMESTAMP>SYSDATE -1

【问题讨论】:

  • 你为什么要猜?你不能看看你的架构吗?
  • @PM77-1,我不能它不是我的数据库。我没有权利。
  • @user1471980: DESC metric_table;或从 metric_table 中选择 dump(timestamp) where rownum = 1;或 select * from all_tables where table_name = 'METRIC_TABLE';如果您可以运行上面的查询,您当然可以看到表定义。
  • @Ditto,DESK metric_table 显示我的 TIMESTAMP 列是 DATE。但是,当我在 TIMESTAMP > SYSDATE-1 处执行操作时,我只能获得几个小时的数据。我应该得到一天的数据。
  • 然后在下面使用 Ollie 的答案。

标签: oracle


【解决方案1】:

假设您的 TIMESTAMP 列包含一个普通的日期/时间变量:

SELECT whatever FROM table WHERE TIMESTAMP >= SYSDATE -1

获取比 24 小时前更新的所有内容。

SELECT whatever FROM table WHERE TIMESTAMP >= SYSDATE - (10.0 / 1440.0)

获取十分钟前更新的所有内容。

SELECT whatever FROM table WHERE TIMESTAMP >= TRUNC(SYSDATE)

得到比昨晚午夜更新的所有内容。

SELECT whatever FROM table WHERE TIMESTAMP >= TRUNC(SYSDATE) -1
                             AND TIMESTAMP < TRUNC(SYSDATE)

得到昨天的一切。

编辑专业提示:请勿在列名中使用保留字,例如 TIMESTAMP

试着算出你在过去 5 天内每小时有多少条记录,如下所示:

 SELECT TO_CHAR(TRUNC(timestamp, 'HH24'), 'DD-MON-YYYY HH24:MI:SS') hr,
        COUNT(*)
   FROM METRIC_TABLE
  WHERE timestamp >= TRUNC(sysdate) -5
  GROUP BY TRUNC(timestamp, 'HH24')

这将帮助您了解数据库中的时间戳值。

【讨论】:

  • @Olilie Jones,我尝试按如下方式转换 TIMESTAMP:从 TIMESTAMP>SYSDATE-1 的表名中选择 cast(TIMESTAMP as TIMESTAMP) as TIMESTAMP,我仍然可以获得几个小时的数据。
  • 为什么选择 CAST ?奥利的回答没有使用 CAST ?不要添加到答案中。 ;) 也许如果你展示你所拥有的一个小样本,我们可以看到你做错了什么;) 相信我们...... Ollie 放的东西会起作用.. 只需将他的 WHERE 子句复制/粘贴到您的查询中(在另请注意,使用名为“TIMESTAMP”的列可能不是最好的主意:P)
猜你喜欢
  • 2018-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-02
  • 2014-12-12
  • 2016-06-23
  • 2022-01-25
  • 2018-09-04
相关资源
最近更新 更多