200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > oracle查找当前日期的三个工作日前那天日期 采用函数方式

oracle查找当前日期的三个工作日前那天日期 采用函数方式

时间:2021-11-15 13:43:31

相关推荐

oracle查找当前日期的三个工作日前那天日期 采用函数方式

业务场景:

取A表中的字段“日期1”的三个工作日前的那一天。有一张现成的表里面是有每年的节假日和周末的期间。

具体表如下:

查询表ZS_YJSF 时,加条件:YZRQ(应征日期)字段等于当前日期的三个工作日前的那天。

有一张表CS_JJR中有两个字段:节假日期起JJRQQ,节假日期止JJRQZ,存了每年所有的节假日周末日期区间。

模拟场景:

CREATE OR REPLACE FUNCTION Func_getworkday(v_date DATE, -- 指定某日期v_deferday NUMBER -- 前几天日期) RETURN DATEIS v_beforeday DATE :=v_date-v_deferday+1;v_holiday_num NUMBER :=0;v_sum NUMBER:=0;i NUMBER :=1;v_bd NUMBER :=v_deferday;v_date1 DATE:= to_date(to_char(v_date,'yyyymmdd'),'yyyymmdd');v_sql VARCHAR2(1000);BEGIN WHILE i<=(v_bd+v_sum) LOOP-- 遍历日期,如在节假日表中找到数据则记为1,否则记为0,保存在变量v_holiday_num中v_sql:='SELECT nvl(count(1),0) FROM CS_JJR WHERE :1 BETWEEN to_date(to_char(JJROO,''yyyymmdd''),''yyyymmdd'')AND to_date(to_char(JJRQZ,''yyyymmdd''),''yyyymmdd'')';EXECUTE IMMEDIATE v_sql INTO v_holiday_num USING v_date1;-- 累计假期天数总和v_sum:=v_sum+v_holiday_num;v_date1:=v_date1-1;i:=i+1;END LOOP; v_beforeday:=v_beforeday-v_sum;RETURN to_date(to_char(v_beforeday,'yyyymmdd'),'yyyymmdd');END;SELECT * FROM ZS_YJSF WHERE to_date(to_char(YZRQ,'yyyymmdd'),'yyyymmdd')=Func_getworkday(sysdate,3);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。