2015-02-06 76 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

相關問題