--年初
i_nc:=to_number(to_char(substr(to_char(tjrq),1,4)||'0101'));
--年末
i_nm:=to_number(to_char(substr(to_char(tjrq),1,4)||'1231'));
--月初
i_yc:=to_number(to_char(substr(to_char(tjrq),1,6)||'01'));
--月末
i_ym:= to_number(to_char(last_day(to_date(tjrq,'yyyymmdd')),'yyyymmdd'));
--上日
i_sr:=to_number(to_char(to_date(tjrq,'yyyymmdd')-1,'yyyymmdd'));
--上月末
i_sym:=to_number(to_char(last_day(add_months(to_date(tjrq,'yyyymmdd'),-1)),'yyyymmdd'));
--旬初旬末
if to_number(substr(to_char(tjrq),7,2))<=10 then
begin
i_xc:=i_yc;
i_xm:=to_number(to_char(substr(to_char(tjrq),1,6)||'10'));
end ;
elsif to_number(substr(to_char(tjrq),7,2))>10 and to_number(substr(to_char(tjrq),7,2))<=20 then
begin
i_xc:=to_number(to_char(substr(to_char(tjrq),1,6)||'11'));
i_xm:=to_number(to_char(substr(to_char(tjrq),1,6)||'20'));
end;
else
begin
i_xc:=to_number(to_char(substr(to_char(tjrq),1,6)||'21'));
i_xm:=i_ym;
end ;
end if;
--季初季末
i_jc:=to_number(substr(to_char(tjrq),1,4)||lpad(to_char(ceil(to_number(substr(to_char(tjrq),5,2))/3)*3-2),2,'00')||'01');
i_jm:=to_number(to_char(last_day(to_date(substr(to_char(tjrq),1,4)
||lpad(to_char(ceil(to_number(substr(to_char(tjrq),5,2))/3)*3),2,'00')||'01','yyyymmdd')),'yyyymmdd'));
i_nc:=to_number(to_char(substr(to_char(tjrq),1,4)||'0101'));
--年末
i_nm:=to_number(to_char(substr(to_char(tjrq),1,4)||'1231'));
--月初
i_yc:=to_number(to_char(substr(to_char(tjrq),1,6)||'01'));
--月末
i_ym:= to_number(to_char(last_day(to_date(tjrq,'yyyymmdd')),'yyyymmdd'));
--上日
i_sr:=to_number(to_char(to_date(tjrq,'yyyymmdd')-1,'yyyymmdd'));
--上月末
i_sym:=to_number(to_char(last_day(add_months(to_date(tjrq,'yyyymmdd'),-1)),'yyyymmdd'));
--旬初旬末
if to_number(substr(to_char(tjrq),7,2))<=10 then
begin
i_xc:=i_yc;
i_xm:=to_number(to_char(substr(to_char(tjrq),1,6)||'10'));
end ;
elsif to_number(substr(to_char(tjrq),7,2))>10 and to_number(substr(to_char(tjrq),7,2))<=20 then
begin
i_xc:=to_number(to_char(substr(to_char(tjrq),1,6)||'11'));
i_xm:=to_number(to_char(substr(to_char(tjrq),1,6)||'20'));
end;
else
begin
i_xc:=to_number(to_char(substr(to_char(tjrq),1,6)||'21'));
i_xm:=i_ym;
end ;
end if;
--季初季末
i_jc:=to_number(substr(to_char(tjrq),1,4)||lpad(to_char(ceil(to_number(substr(to_char(tjrq),5,2))/3)*3-2),2,'00')||'01');
i_jm:=to_number(to_char(last_day(to_date(substr(to_char(tjrq),1,4)
||lpad(to_char(ceil(to_number(substr(to_char(tjrq),5,2))/3)*3),2,'00')||'01','yyyymmdd')),'yyyymmdd'));
以上函数其中 --季初季末的ceil函数和ipad函数具体用法:
ceil是求该数的求不小于给定实数的最小整数如ceil(1.2)=2 ceil(2.9)=3
lpad函数:select ipad('test',2,'0')from dual结果是te ,select ipad('t',2,'0')from dual 结果是0t,意思就是从左边算起留下两位字符,不够两位的由0填充。第一个参数就是要截取的字符,第二个参数是留下的位数,第三个参数是填充的字符(oracle没有print,也没有db2的values,用上面的系统表dual来做测试,查看结果)。
last_day()则是求该日期一月的最后一天