如果一年中最后一个月总天数除一周总天数后的余数小于三天刚把这周放到当前年的一周,如果大于三天刚放到下一年的第一周,周号在新一年又重新计算 
  
    周号    星期天      星期一      星期二      星期三      星期四    星期五    星期六 
    200853  2008-12-28  2008-12-29  2008-12-30 2008-12-31  2009-1-1  2009-1-2  2009-1-3     200901  2009-1-4    2009-1-5    2009-1-6   2009-1-7      2009-1-8  2009-1-9  2009-1-10     200902  2009-1-11  2009-1-12  2009-1-13    2009-1-14    2009-1-15  2009-1-16  2009-1-17 还有在问一个问题SQL里一年中的每一周怎样查出来,比如200901,200902,200903,····这种语句该怎样写

解决方案 »

  1.   


    最简单的使用select TO_CHAR(TO_DATE('2009-12-02','YYYY-MM-DD'), 'WW') from dual
    不过to_char()函数在计算一年中第几周是从该年的1月1日开始的。 一下SQL 能得到正确的周数..
    /* Formatted on 2009/12/02 15:31 (Formatter Plus v4.8.8) */
    SELECT TO_CHAR
              (DECODE
                  (SIGN
                      (  (  TO_DATE ('2009-12-02', 'YYYY-MM-DD')
                          + TO_NUMBER
                                  (DECODE (TO_CHAR (TRUNC (TO_DATE ('2009-12-02',
                                                                    'YYYY-MM-DD'
                                                                   ),
                                                           'YYYY'
                                                          ),
                                                    'D'
                                                   ),
                                           '1', '8',
                                           TO_CHAR (TRUNC (TO_DATE ('2009-12-02',
                                                                    'YYYY-MM-DD'
                                                                   ),
                                                           'YYYY'
                                                          ),
                                                    'D'
                                                   )
                                          )
                                  )
                          - 2
                         )
                       - LAST_DAY (TO_DATE ('2009-12-02', 'YYYY-MM-DD'))
                      ),
                   1, LAST_DAY (TO_DATE ('2009-12-02', 'YYYY-MM-DD')),
                   (  TO_DATE ('2009-12-02', 'YYYY-MM-DD')
                    + TO_NUMBER (DECODE (TO_CHAR (TRUNC (TO_DATE ('2009-12-02',
                                                                  'YYYY-MM-DD'
                                                                 ),
                                                         'YYYY'
                                                        ),
                                                  'D'
                                                 ),
                                         '1', '8',
                                         TO_CHAR (TRUNC (TO_DATE ('2009-12-02',
                                                                  'YYYY-MM-DD'
                                                                 ),
                                                         'YYYY'
                                                        ),
                                                  'D'
                                                 )
                                        )
                                )
                    - 2
                   )
                  ),
               'WW'
              )
      FROM DUAL;------------------------------------------------------------------------------
    Blog: http://blog.csdn.net/tianlesoftware
    网上资源: http://tianlesoftware.download.csdn.net
    相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
    Q Q 群:62697716 
      

  2.   

    select to_char(date'2008-1-2'+(rownum-1)*7,'yyyy')||
       to_char(trunc((date'2008-1-2'+(rownum-1)*7-trunc(date'2008-1-2'+(rownum-1)*7,'yyyy'))/7)+1,'fm00')周号,
      date'2007-12-30'+(rownum-1)*7 星期天,
      date'2007-12-31'+(rownum-1)*7 星期一,
      date'2008-1-1'+(rownum-1)*7 星期二,
      date'2008-1-2'+(rownum-1)*7 星期三,
      date'2008-1-3'+(rownum-1)*7 星期四,
      date'2008-1-4'+(rownum-1)*7 星期五,
      date'2008-1-5'+(rownum-1)*7 星期六
    from dual
    connect by rownum<700