从当前sysdate中检索最近两年的数据

时间:2013-04-07 10:22:56

标签: sql oracle

嗨我被困在一个oracle查询,其中我想根据当前年份检索前两年的数据,就像这是2013年所以我想要检索2011年和2012年的所有记录我已经完成了以下查询但是m卡在日期格式上我对oracle很新 这是查询

Select 
to_date(stage_end_date,'yy') Years,SUBPRODUCT Product,sum(OFFER_COUNT) SumCount
    ,sum(offer_amount)SumAmount
from stage_amt  
and 
Offer_amount !=0 
and 
to_date(stage_end_date,'yy')
between to_char( sysdate, -2 ) and to_char( sysdate)
group by to_date(stage_end_date,'yy'),SUBPRODUCT
order by Years asc;

收到此错误 ORA-00932:不一致的数据类型:预期DATE得到NUMBER 00932. 00000 - “不一致的数据类型:预期%s获得%s” 任何人都可以帮我做什么

问候

2 个答案:

答案 0 :(得分:5)

这个怎么样?

where stage_end_date >= trunc(sysdate, 'yyyy') - interval '2' year
  and stage_end_date <  trunc(sysdate, 'yyyy');

答案 1 :(得分:1)

使用sysdate你正在应用to_char函数但是给出了错误的日期格式 -

我相信stage_end_date是一个日期列,如果是这样,我认为你需要在select查询中使用to_char函数代替to_date ...尝试下面的查询 -

Select To_Char(stage_end_date,'yy') Years,
       SUBPRODUCT Product,
       sum(OFFER_COUNT) SumCount,
       sum(offer_amount)SumAmount
from stage_amt  
where Offer_amount !=0 
  and to_number(To_char(stage_end_date,'YYYY')) between 
      to_number(to_char( sysdate,'YYYY'))-2 and to_number(to_char(sysdate,'YYYY'))
group by to_char(stage_end_date,'yy'),
         SUBPRODUCT
order by Years asc;

虽然Oracle会在比较时将字符串转换为数字或数据转换,但为了更安全,我在编写TO_NUMBER函数时也会比较日期。