周
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;