DECLARE
	V_LAST_WEEK_DAY VARCHAR2(100);-- 上周一 年月日
	V_LAST_YERA_MONTH VARCHAR2(100);-- 上周一 年月
	V_LAST_DAY NUMBER;-- 上周一 日
	V_LAST_MONTH NUMBER;-- 上周一 月
	V_YERA_MONTH VARCHAR2(100);-- 本周一 月日
	V_MONTH NUMBER;-- 本周一 月
	V_MONTH_DAY_NUM NUMBER;-- 指定月份的天数
	V_DAY_NUM   NUMBER;--	天数相差
	V_MONTH_TIME   VARCHAR2(100);--	哪一月
BEGIN
	--获取上周一 年月日
	SELECT TO_CHAR(TRUNC(SYSDATE,'IW')-7,'YYYY-MM-DD') INTO V_LAST_WEEK_DAY FROM DUAL;
	--获取上周一 年月
	SELECT TO_CHAR(TRUNC(SYSDATE,'IW')-7,'YYYY-MM') INTO V_LAST_YERA_MONTH FROM DUAL;
  	--获取上周一 月
	SELECT TO_CHAR(TRUNC(SYSDATE,'IW')-7,'MM') INTO V_LAST_MONTH  FROM DUAL;
        --获取上周一 日
	SELECT TO_CHAR(TRUNC(SYSDATE,'IW')-7,'DD') INTO V_LAST_DAY  FROM DUAL;
  	--本周一 年月
	SELECT TO_CHAR(TRUNC(SYSDATE,'IW'),'YYYY-MM') INTO V_YERA_MONTH FROM DUAL;
	DBMS_OUTPUT.PUT_LINE('上周一 年月日:' || V_LAST_WEEK_DAY||' 本周一 年月:' || V_YERA_MONTH);
 	--获取本周一 月
	SELECT TO_CHAR(TRUNC(SYSDATE,'IW'),'MM') INTO V_MONTH  FROM DUAL;
 	IF V_MONTH = V_LAST_MONTH THEN
		V_MONTH_TIME := V_YERA_MONTH;
	ELSE
 		--获取指定月份的天数
		SELECT ADD_MONTHS(TO_DATE(V_LAST_YERA_MONTH,'YYYY-MM'),1)-TO_DATE(V_LAST_YERA_MONTH,'YYYY-MM') INTO V_MONTH_DAY_NUM FROM DUAL;
  		DBMS_OUTPUT.PUT_LINE('月份:' || V_LAST_YERA_MONTH||' 天数:' || V_MONTH_DAY_NUM);
		--用上一周月份的天数减去上一周对应的日  若结果大于等于3,则为上月周,若结果小于3,则为本月周
 		SELECT V_MONTH_DAY_NUM-V_LAST_DAY INTO V_DAY_NUM FROM DUAL;
  		DBMS_OUTPUT.PUT_LINE('天数相差:' || V_DAY_NUM);
 			IF V_DAY_NUM<3 THEN
	 		V_MONTH_TIME := V_YERA_MONTH;
			ELSE
			V_MONTH_TIME := V_LAST_YERA_MONTH;
			END IF;
 	END IF;
 	DBMS_OUTPUT.PUT_LINE('入库月份:' || V_MONTH_TIME);
END;

 

posted @ 2023-11-16 12:10  许孟  阅读(8)  评论(0编辑  收藏  举报