2011-06-22 36 views
0

我需要一些幫助來構建一個oracle查詢,該查詢將提前2天的值。幫助在oracle中使用時間戳值執行日期算術

timestamp列(數字)值看起來像這樣201106210000。 像數列的其他日期有這樣的值: year=2011 quarter=2 month=6 day=20

在哪裏做日期算術有意義?使用時間戳還是應該使用這些其他日曆列?

該表還具有以下屬性日期:

Name      Null? Type 
----------------------------------------- -------- ---------------------------- 
YEAR       NUMBER 
QUARTER      NUMBER 
MONTH       NUMBER 
DAY       NUMBER 
HOUR       NUMBER 
TIMESTAMP      NUMBER 
CNT_N           NUMBER 

回答

3

首先,這個表是存儲日期(其希望你知道的)一個蹩腳的方式。爲什麼不是DATE或TIMESTAMP列?

如果超出了你的控制範圍,我會建議在YEAR,MONTH和DAY列的連接上使用to_date(),這樣你就可以使用實際的DATE。喜歡的東西:

select * 
from table 
where to_date(year||'/'||month||'/'||day, 'YYYY/MM/DD') >= trunc(sysdate) - 2 

由於您的列不是你需要一個基於函數的索引,以避免全表掃描使用這種方法真正的日期列。

+0

我同意表。謝謝,這對我有用。 – jdamae

0
select * from TABLE1 

where 
to_date(to_char(DAY,'00') || 
     to_char(MONTH,'00') || 
     to_char(YEAR,'0000'), 'ddmmyyyy') < sysdate-2 
/* substitute sysdate-2 with any date but becareful of using EQUAL 
because sysdate will have a timestamp, so use Greater Than or LessThan */ 

不過,如果你需要的時間爲好,這裏是代碼

select * from TABLE1 

where 
to_date( 
to_char(DAY,'00') || 
to_char(MONTH,'00') || 
to_char(YEAR,'0000') || ' ' || 
to_char(HOUR,'00'), 'ddmmyyyy hh24') 
< sysdate-2 

/* I don't know if you have a field for minutes and seconds , 
but I am sure you get the idea*/ 
+0

太好了。謝謝你的幫助。 – jdamae

+0

非常感謝。不如@Craig的那種 – Ahmad