自定义函数

create or replace function fkr_tb_date(iv_date varchar2)
return varchar2

is
/** HEAD <四类用户 计算日报表中环比指标中的上月同一天的日期>

  • @NAME
  • @TYPE 月
  • @PARAMETER iv_date IN varchar2 统计日期,格式:YYYYMM
  • @DESCRIPTION 四类用户 计算日报表中环比指标中的上月同一天的日期
  • @TARGET VGOPKR#
  • @VERSION 1.0.0
  • @AUTHOR LH
  • @CREATE-DATE <2024-XX-XX>
  • @TODO 返回值为传入日期的上一月的同一天日期数据
  • @COPYRIGHT
    */

flag int(1); --闰年标记符,0:平年,1:闰年
vv_year varchar2(4);
vv_month varchar2(2);
vv_day varchar2(2);
ov_fkr_tb_date varchar2(8);
begin
flag := 0;
vv_year := substr(iv_date,1,4);
vv_month := substr(iv_date,5,2);
vv_day := substr(iv_date,7,2);
ov_fkr_tb_date := ‘0’;

–判断传入的日期是否属于闰年
if (( mod(to_number(vv_year),4) = 0 and mod(to_number(vv_year),100) != 0 ) or ( mod(to_number(vv_year),400) = 0 )) then
flag := 1;
else
flag := 0;
end if;
–处理3月份最后一天的情况
if ( flag = 1 ) then
if ( vv_month = ‘03’ and vv_day = ‘31’ ) then
ov_fkr_tb_date := to_char( add_months( to_date( iv_date,‘yyyymmdd’),-1),‘yyyymm’) || ‘29’;
return ov_fkr_tb_date;
end if;
else
if ( vv_month = ‘03’ and vv_day = ‘31’ ) then
ov_fkr_tb_date := to_char( add_months( to_date( iv_date,‘yyyymmdd’),-1),‘yyyymm’) || ‘28’;
return ov_fkr_tb_date;
end if;
end if;
–处理其他月份情况
if ( vv_month in (‘05’,‘07’,‘10’,‘12’) and vv_day = ‘31’ ) then
ov_fkr_tb_date := to_char( add_months( to_date( iv_date,‘yyyymmdd’),-1),‘yyyymm’) || ‘30’;
return ov_fkr_tb_date;
else
ov_fkr_tb_date := to_char( add_months( to_date( iv_date,‘yyyymmdd’),-1),‘yyyymm’) || vv_day;
return ov_fkr_tb_date;
end if;
end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值