急急急,在oracle 存储过程,怎么得到 sysdate的之前的 1年和一个月的 时期值(50分)

  • 主题发起人 xiaolin0522
  • 开始时间
X

xiaolin0522

Unregistered / Unconfirmed
GUEST, unregistred user!
没有其他办法了吗?
一个月 并不表示 30天啊

有 addmonth 这个 函数么? 怎么用呢?
 
ding一下啊
 
55,没人知道吗?

 
我说一个最笨的方法
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中好象有关于时间运算的函数。呵呵好久没用不记得了。
 
呜呜,有 addmonth 这个函数么?

我要准确的 月
 
1* select add_months(trunc(sysdate),-1) from dual
SQL> /

ADD_MONTHS
----------
02-3月 -03

SQL> ed
已写入文件 afiedt.buf

1* select add_months(trunc(sysdate),-12) from dual
SQL> /

ADD_MONTHS
----------
02-4月 -02
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部