提取一周的最后一天

时间:2013-12-26 13:02:46

标签: oracle plsql

我需要提取一年中特定一周的最后一天。例如,2013年51 st 周的最后一天。

我需要一个能够做到这一点的PL / SQL程序/功能。

2 个答案:

答案 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;
/