嗨我被困在一个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” 任何人都可以帮我做什么
问候
答案 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
函数时也会比较日期。