根据年度、月份、周次、星期几,计算出对应的日期;
比如 2012年1月份 第二周 星期一 计算出 结果是 2012.1.9
我想问如何用oracle,sql语句,计算出来??

解决方案 »

  1.   

    --有一个笨办法,先列举出所有日期,然后根据条件进行查询,返回唯一值
    --先查询出一月份所有日期,然后过滤
    select sDate
      from (SELECT to_date('2012-01-01', 'YYYY-MM-DD') + ROWNUM - 1 as sDate
              FROM dual
            CONNECT BY ROWNUM <= (to_date('2012-01-31', 'YYYY-MM-DD') -
                       to_date('2012-01-01', 'YYYY-MM-DD') + 1))
    --2012.11
    where to_char(sDate,'yyyy') = 2012
    and to_char(sDate,'mm')= 1
    --第2周
    and to_char(sDate,'w')=2
    --星期一
    and to_char(sDate,'d')=2
    --结果
    1 2012-01-09
      

  2.   

    问题解决了:
    CREATE OR REPLACE FUNCTION get_date2(
    /*
    *已知 ***某年某月的第n个星期w***,算出具体日期。
    */
                y       number,     --年
                m       number,     --月
                idx     number,     --  第几个n 周
                dow     NUMBER      --  星期 m  (1 = 星期日, 7=星期六)
                )
        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 to_char(v_date,'DD')*1;
       RETURN v_date;
    END;