帮助在oracle中使用timestamp值执行日期算术

时间:2011-06-22 20:49:29

标签: sql oracle date timestamp

我需要一些帮助来构建一个oracle查询,该查询将在之前的2天内提取值。

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

2 个答案:

答案 0 :(得分:3)

首先,这个表是一种存储日期的糟糕方式(希望你知道)。为什么不是DATE或TIMESTAMP列?

如果这不受您的控制,我建议在YEAR,MONTH和DAY列的串联上使用to_date(),这样您就可以使用实际的DATE。类似的东西:

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

由于您的列不是实际日期列,因此您需要基于函数的索引以避免使用此方法进行全表扫描。

答案 1 :(得分: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*/