我说一个最笨的方法
v_sysdate varchar2(8); --变量用于现在时间
v_y varchar2(8);--现在的年份
v_m varcahe2(8);--现在有月份
e_y date;--sysdate-1的年份
e_m date;--sysdate-1的月份
begin
select to_char(sysdate,'yyyymm') into v_sysdate from dual ;--取出系统时间
v_y=substr(v_sysdate,1,4);--取现在的年份
v_m=substr(v_sysdate,5,2);--取现在的月分
v_y=to_char(to_number(v_y)-1);--年份减1
e_y=to_date(v_y||v_m,'yyyymm')--再转为时间格式.这是结果有年有月,你可以不要月即e_y=to_date(v_y,'yyyy')
select to_char(sysdate,'yyyymm') into v_sysdate from dual ;
v_y=substr(v_sysdate,1,4);
v_m=substr(v_sysdate,5,2);
if v_m='01' then --如果是1月就是
v_m='12' --12月了吧
v_y=to_char(to_number(v_y)-1) --当然年份要减1
else v_m=to_char(to_number(v_m)-1) --要不然就月份减1
if length(v_m)=1 --为了转化成时间,判月份是不是1位
then v_m='0'+v_m --如果是1位就在前加上0
end if
end if
e_m=to_date(v_y||v_m,'yyyymm') --转化为时间格式
end;
呵呵。我自己都觉得这种方法好笨哟。
oracle中好象有关于时间运算的函数。呵呵好久没用不记得了。