如题:
传的格式为YYYYMM
比如我传一个 201301
得到1月份的起止日期 2013-01-01 2013-01-31
和1月份所在的年 2013 以及 月份 01
得到1月份上一个月的 起止日期 2012-12-01 2012-12-31
和12月份所在的年 2012 以及 月份 12
以前是固定的sysdate,现在需要改成传年月的
select to_char(add_months(last_day(sysdate)+1,-2),'yyyy-MM-dd') into v_lm_firstday from dual;
select to_char(add_months(last_day(sysdate),-1),'yyyy-MM-dd') into v_lm_lastday from dual;
select to_char(add_months(last_day(sysdate)+1,-1),'yyyy-MM-dd') into v_tm_firstday from dual;
select to_char(last_day(sysdate),'yyyy-MM-dd') into v_tm_lastday from dual;
select to_char(add_months(last_day(sysdate)+1,-2),'yyyy') into v_lastyear from dual;
select to_char(add_months(last_day(sysdate)+1,-2),'MM') into v_lastmonth from dual;
select to_char(add_months(last_day(sysdate)+1,-1),'yyyy') into v_thisyear from dual;
select to_char(last_day(sysdate),'MM') into v_thismonth from dual;
------解决方案--------------------
declare
v_month varchar2(6) :=&v_month;
v_first_day varchar2(12);
begin
v_first_day:=to_date(v_month
------解决方案--------------------
'01','yyyy--mm-dd');
dbms_output.put_line(v_first_day);
end;
剩下的建议楼主自己尝试下吧,这个其实都很简单的。
------解决方案--------------------
把sysdate换成to_date(' 201301'
------解决方案--------------------
'01','yyyymmdd') 就可以了
------解决方案--------------------
SQL> set serveroutput on
SQL> declare v_date varchar2(20);
2 begin
3 v_date:=&1;
4 dbms_output.put_line(to_date(v_date,'yyyy-mm'));
5 dbms_output.put_line(last_day(to_date(v_date,'yyyy-mm')));
6 dbms_output.put_line(add_months(to_date(v_date,'yyyy-mm'),-1));
7 dbms_output.put_line(last_day(add_months(to_date(v_date,'yyyy-mm'),-1)));
8 end;
9 /
输入 1 的值: 201301
原值 3: v_date:=&1;
新值 3: v_date:=201301;
2013-01-01
2013-01-31
2012-12-01
2012-12-31
PL/SQL 过程已成功完成。