--计算当前日期的上周时间段
select (trunc(sysdate-7,'DD')-to_char(sysdate-7,'D')+1) as last_week_start_date,(trunc(sysdate-7,'DD')-to_char(sysdate-7,'D')+7) as last_week_end_date from dual
--根据年、月、周、星期计算日期
CREATE OR REPLACE FUNCTION get_date(
y number,
m number,
idx number,
dow NUMBER
)
return date
IS
v_date DATE;
v_cnt NUMBER := 0;
BEGIN
IF idx NOT BETWEEN 1 AND 5 THEN RETURN NULL;
END IF;
v_date := TO_DATE( y || '-' || m, 'YYYY-MM' ) - 1;
WHILE TRUE LOOP
SELECT next_day( v_date , dow )
INTO v_date
FROM dual ;
v_cnt := v_cnt + 1;
IF idx = v_cnt THEN EXIT;
END IF;
END LOOP;
RETURN v_date;
END;