比如 我给一个周数  32   返回这周的第一天  和最后一天 

解决方案 »

  1.   

    Oracle 获得某日期属于一年中的第几个自然周
    转载了别人的。。
    select to_week_by_year(to_date('2010-1-1', 'yyyy-MM-dd')) 
      from bak_member 
    where rownum = 1  //输出:1 select to_week_by_year(to_date('2010-1-3', 'yyyy-MM-dd')) 
      from bak_member 
    where rownum = 1  //输出:1 select to_week_by_year(to_date('2010-1-4', 'yyyy-MM-dd')) 
      from bak_member 
    where rownum = 2  //输出:1 函数如下: 
    create or replace function to_week_by_year(sdate in date) return number is 
      Result number; 
    begin 
      select to_char(decode(sign((to_date(to_char(sdate, 'yyyymmdd'), 
                                          'yyyymmdd') + 
                                 to_number(decode(to_char(trunc(to_date(to_char(sdate, 
                                                                                 'yyyymmdd'), 
                                                                         'yyyymmdd'), 
                                                                 'yyyy'), 
                                                           'd'), 
                                                   '1', 
                                                   '8', 
                                                   to_char(trunc(to_date(to_char(sdate, 
                                                                                 'yyyymmdd'), 
                                                                         'yyyymmdd'), 
                                                                 'yyyy'), 
                                                           'd'))) - 2) - 
                                 last_day(to_date(to_char(sdate, 'yyyymmdd'), 
                                                  'yyyymmdd'))), 
                            1, 
                            last_day(to_date(to_char(sdate, 'yyyymmdd'), 
                                             'yyyymmdd')), 
                            (to_date(to_char(sdate, 'yyyymmdd'), 'yyyymmdd') + 
                            to_number(decode(to_char(trunc(to_date(to_char(sdate, 
                                                                            'yyyymmdd'), 
                                                                    'yyyymmdd'), 
                                                            'yyyy'), 
                                                      'd'), 
                                              '1', 
                                              '8', 
                                              to_char(trunc(to_date(to_char(sdate, 
                                                                            'yyyymmdd'), 
                                                                    'yyyymmdd'), 
                                                            'yyyy'), 
                                                      'd'))) - 2)), 
                     'ww') 
        into result 
        from dual;   return Result; 
    end to_week_by_year; 
      

  2.   

    Select  DATEADD(wk, DATEDIFF(wk,32,getdate()),0) ms sql 里的,oracle 哪些函数可以替换下,O(∩_∩)O哈哈~
      

  3.   

    --第一天:
    select (trunc(sysdate,'yy')+(32-1)*7) from dual;
    --最后一天:
    select (trunc(sysdate,'yy')+(32-1)*7+6) from dual;
      

  4.   


    --------首先获取当天所在周的第一天 使用trunc(sysdate,'d') --返回当前星期的第一天.
    select trunc(sysdate,'d') from dual--------然后查询出当前是当年的多少周to_char(data,'ww')
    select to_char(trunc(sysdate,'d'),'ww')-------然后查询出来的值得减去32的日期,再使用trunc,得出32周的第一天,加上7得出最后一天
    select trunc(trunc(sysdate,'d')- (to_char(trunc(sysdate,'d'),'ww')-32),'d') from dual
      

  5.   


    ------获取当前位于一年中的多少周
    select to_char(trunc(sysdate,'d'),'ww') from dual
      

  6.   

    --其实做一个当年每周对应的第一天和最后一天的临时表就可以了
    --关键在于当年第一周的第一天和最后一天怎么算,后面只需加上7天就是一周,类推
    --还有就是确定的是,一年总共只有53周
    --Oracle中周日为第一天 ,周六为最后一天
    SELECT LEVEL 周次,
        (Trunc(SYSDATE,'yyyy')-7)
        +
        (7-To_Char(Trunc(SYSDATE,'yyyy'),'d')+1)+(LEVEL-1)*7  当周第一天,
        (Trunc(SYSDATE,'yyyy')-7)
        +
        (7-To_Char(Trunc(SYSDATE,'yyyy'),'d')+1)+(LEVEL-1)*7+6 当周最后一天
    FROM dual
    CONNECT BY LEVEL<=53
      

  7.   

    谢谢 我按照这种做法做了呵呵 谢谢了啊 --第一天:
    select (trunc(sysdate,'yy')+(32-1)*7) from dual;
    --最后一天:
    select (trunc(sysdate,'yy')+(32-1)*7+6) from dual;
      

  8.   

    SQL> select Trunc(SYSDATE,'yyyy')-To_Char(Trunc(SYSDATE,'yyyy'),'d')+1+31*7 "第一天",
      2  Trunc(SYSDATE,'yyyy')-To_Char(Trunc(SYSDATE,'yyyy'),'d')+1+31*7+6 "最后一天"
      3  from dual
      4  /第一天         最后一天
    -------------- --------------
    01-8月 -10     07-8月 -10SQL> 
      

  9.   

    这种不对!没考虑第一周!即当年第一天是当周第几天!
    比对我7楼SQL运行的结果,你看看!
      

  10.   


    --再给的简单点:
    SELECT LEVEL 周次,
        (Trunc(SYSDATE,'yyyy')-To_Char(Trunc(SYSDATE,'yyyy'),'d')+1)+(LEVEL-1)*7  当周第一天,
        (Trunc(SYSDATE,'yyyy')+(7-To_Char(Trunc(SYSDATE,'yyyy'),'d')))+(LEVEL-1)*7 当周最后一天
    FROM dual
    CONNECT BY LEVEL<=53