求某一年的第一周的第一天的算法。

解决方案 »

  1.   

    最笨的办法:
    制定一个已知日期,20130414,星期日,选星期日少一步计算。
    7-(newdate-today)/7+1
    newdate就是你所谓的某一年的1月1日
    today就是已知的日期。如果还要考虑的话就是过去的日子,加绝对值取正就可以了。
      

  2.   

    初略验证下是对的,楼主看看
    是以周日为第一天的
    select next_day
       (
           add_months(trunc(TO_DATE('2013/3/17','yyyy/mm/dd'),'yyyy'),rownum-1),7
       )  
        +decode
       (
          next_day
             (
                 add_months(trunc(TO_DATE('2013/3/17','yyyy/mm/dd'),'yyyy'),rownum-1),7
             )
         ,add_months(trunc(TO_DATE('2013/3/17','yyyy/mm/dd'),'yyyy'),rownum-1)+7,-6,1
       )  
    from dual ;  
       
      

  3.   

    另還有個奇怪的問題
    select to_char(to_date('20110102','yyyymmdd'),'iw') from dual 
    = 52 表示上一年的第52周
    select to_char(to_date('20110102','yyyymmdd'),'d') from dual 
    = 1 表示當年的第一周的第一天
    BUG?
      

  4.   

    select DECODE(to_char(trunc(TO_DATE('2013-01-01','YYYY-MM-DD'),'yyyy'),'D'),'1',
           trunc(TO_DATE('2013-01-01','YYYY-MM-DD'),'yyyy'),
           next_day(trunc(TO_DATE('2013-01-01','YYYY-MM-DD'),'yyyy'),1)-7)
     from dual
      

  5.   

    這個也應該是錯的,iw 一周是從周一到周日,而 turnc(sysdate, 'D')算出來的第一天是周日,且一年的第一周的第一天有可能是去年的最後幾天