我需要一些帮助来构建一个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
答案 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*/