我需要提取一年中特定一周的最后一天。例如,2013年51 st 周的最后一天。
我需要一个能够做到这一点的PL / SQL程序/功能。
答案 0 :(得分:1)
假设一周内最后一天 'SUNDAY'
PL / SQL函数!
CREATE OR REPLACE FUNCTION GET_LAST_DATE_IN_WEEK( p_WEEK INTEGER, p_YEAR INTEGER)
RETURN DATE
IS
v_DATE DATE := NULL;
BEGIN
IF(p_WEEK IS NULL OR p_YEAR IS NULL) THEN
-- Handle the data validation here
v_DATE := NULL;
RETURN v_DATE;
END IF;
v_DATE := next_day(TRUNC(to_date(p_YEAR,'YYYY'),'YYYY')+(p_WEEK-1)*7,'SUNDAY');
IF TO_CHAR(v_DATE,'YYYY') > p_YEAR THEN
v_DATE := LAST_DAY(to_date('12'||p_YEAR,'MMYYYY'));
END IF;
RETURN v_DATE;
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error in GET_LAST_DATE_IN_WEEK : '||SQLERRM);
RETURN NULL;
END GET_LAST_DATE_IN_WEEK;
/
你这样调用它!
SELECT GET_LAST_DATE_IN_WEEK(51,2013) FROM DUAL;
祝你好运!
答案 1 :(得分:0)
这应该可以通过dbms_scheduler
:
declare
result_ date;
begin
dbms_scheduler.evaluate_calendar_string (
calendar_string => 'FREQ=YEARLY; BYWEEKNO=51; BYDAY=sun',
start_date => date '2013-01-01',
return_date_after => date '2013-01-01',
next_run_date => result_);
dbms_output.put_line(' Sunday of 51st week in 2013: ' || result_);
end;
/