2015-02-06 81 views
0

我有,我想取回最后几天或最后10分钟的数据Oracle数据库:如何从Oracle表中检索最后一天的数据?

我尤斯该命令先:

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数据时间格式。

有没有办法在这之前,时间戳格式到Oracle时间戳格式:

TIMESTAMP>SYSDATE -1 
+2

你为什么要猜测?你不能看看你的模式吗? – 2015-02-06 21:04:03

+0

@ PM77-1,我不能这不是我的数据库。我没有权利。 – user1471980 2015-02-06 21:05:27

+1

@ user1471980:DESC metric_table;或从metric_table中选择dump(timestamp),其中rownum = 1;或从all_tables中选择* where table_name ='METRIC_TABLE';如果你可以运行你的查询,你当然可以看到表定义。 – Ditto 2015-02-06 21:16:14

回答

4

意味着你的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') 

这将帮助你了解你在你的数据库中有哪些时间戳值。

+0

@Olilie Jones,我尝试转换TIMESTAMP,如下所示:从TIMESTAMP> SYSDATE-1的表名中选择将TIMESTAMP转换为TIMESTAMP作为TIMESTAMP,但仍得到几小时的数据。 – user1471980 2015-02-06 21:12:08

+0

为什么选择CAST? Ollie的答案没有使用CAST?不要添加到答案。 ;)也许如果你展示一个你有什么样的小样本,我们可以看到你做错了什么;)相信我们......奥尔放什么工作..只是复制/经过他的WHERE子句到你的查询中另一个说明,使用名为“TIMESTAMP”的列可能不是最好的想法:P) – Ditto 2015-02-06 21:27:01

相关问题