给定某一年(如2011),该年的第几周(如20周),求一个SQL,已知年和周,得到起止时间

解决方案 »

  1.   


    select * from (
    select to_char(to_date('2011'||'-01', 'YYYY-MM') + rownum - 1, 'YYYY-MM-DD') sdate 
    from dual
    connect by rownum <= 366)
    where to_char(to_date(sdate,'yyyy-mm-dd'),'WW')=20
               sdate 
    ---------------------
    1 2011-05-14
    2 2011-05-15
    3 2011-05-16
    4 2011-05-17
    5 2011-05-18
    6 2011-05-19
    7 2011-05-20
      

  2.   

    上面是根据年和周获取那周的日期这个是获取周的起始日期select max(sdate) m_date,min(sdate) n_date from (
    select to_char(to_date('2011'||'-01', 'YYYY-MM') + rownum - 1, 'YYYY-MM-DD') as sdate 
    from dual
    connect by rownum <= 365)
    where to_char(to_date(sdate,'yyyy-mm-dd'),'WW')=20         m_date          n_date
    -------------------------------------
    1 2011-05-20 2011-05-14
      

  3.   

    SELECT trunc(to_date('2011'||'0101','yyyymmdd'), 'day') + 1 + 7*20,
           trunc(to_date('2011'||'0101','yyyymmdd'), 'day') + 1 + 7*20 + 6
      from dual;
      

  4.   

    修正下
    SELECT trunc(to_date('2011'||'0101','yyyymmdd'), 'day') + 1 + 7*(20-1),
           trunc(to_date('2011'||'0101','yyyymmdd'), 'day') + 1 + 7*(20-1) + 6
      from dual;
      

  5.   

    select to_date(20110101,'YYYYMMDD') +(20-1)*7,to_date(20110101,'YYYYMMDD') +20*7-1
     from dual
      

  6.   

        select to_date(to_char(trunc(sysdate,'yyyy'),'yyyymmdd'),'yyyymmdd')+19*7+1,
               to_date(to_char(trunc(sysdate,'yyyy'),'yyyymmdd'),'yyyymmdd')+20*7 from dual;