2

嗨,我被困在一个 oracle 查询中,其中我想根据当前年份检索前两年的数据,比如 2013 年,所以我想检索 2011 年和 2012 年的所有记录,我已经完成了以下查询,但我陷入困境日期格式我对 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”谁能帮我做什么

问候

4

2 回答 2

8

这个怎么样?

where stage_end_date >= trunc(sysdate, 'yyyy') - interval '2' year
  and stage_end_date <  trunc(sysdate, 'yyyy');
于 2013-04-07T10:35:34.000 回答
1

使用 sysdate 您正在应用 to_char 函数,但给出的日期格式不正确 -

我相信 stage_end_date 是一个日期列,如果是这样,我认为您需要在选择查询中使用 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还在比较日期时编写了函数。

于 2013-04-07T10:36:26.947 回答