2014年第42周周日的日期,参考
select next_day(to_date('2014-01-01','yyyy-mm-dd'),1)-14+42*7 D from dual;

解决方案 »

  1.   

    --2014年第10周的第一天
    select max(dt) + 1
      from (select to_date('20140101', 'yyyymmdd') + level dt
              from dual
            connect by to_char(to_date('20140101', 'yyyymmdd') + level, 'iw') <> 10);
      

  2.   

    oracle当中已经用什么标准啊?
    select to_date('20140101000000','yyyymmddhh24miss')+(42-1)*7  firstday from dual
    我找出的42周第一天是10月15日
      

  3.   

    10月15是周三啊,怎么算是第一天?
    难道2014-1-1是周三就用周三当第一天了,那倒简单了
    to_date('2014-01-01','yyyy-mm-dd')+(42-1)*7
      

  4.   

    oracle用什么标准没啥关系,主要是你想要什么样的数据,什么样的结果,一切以业务需求为主
      

  5.   

    试了下第一周存在问题,算出的结果是2014-1-3select max(dt)
      from (select to_date('20140101', 'yyyymmdd') + decode(level, 1, 0, level) dt
              from dual
            connect by to_number(to_char(to_date('20140101', 'yyyymmdd') + level - 1,
                                         'iw')) < 1);
      

  6.   

    --按照周一到周日为一周算周的开始时间和结束时间(IW)自然周
    WITH PARAMS AS (SELECT TRUNC(TO_DATE('2009-01-01','YYYY-MM-DD'),'YYYY') AS SD FROM DUAL)
    SELECT LEVEL 周次,
    DECODE(SIGN(5-DECODE(TO_CHAR(PM.SD,'D'),'1','7',TO_CHAR(PM.SD,'D'))),-1,
    NEXT_DAY(PM.SD+(LEVEL-1)*7,2),NEXT_DAY(PM.SD+(LEVEL-1)*7-7,2))
     当周第一天,
    DECODE(SIGN(5-DECODE(TO_CHAR(PM.SD,'D'),'1','7',TO_CHAR(PM.SD,'D'))),-1,
    NEXT_DAY(PM.SD+(LEVEL-1)*7,2),NEXT_DAY(PM.SD+(LEVEL-1)*7-7,2)) + 6
    当周最后一天
    FROM DUAL D
    LEFT JOIN PARAMS PM ON 1=1
    CONNECT BY LEVEL<=53
    --按照周日到周六为一周算周的开始时间和结束时间(D)
    SELECT LEVEL 周次,(TRUNC(TO_DATE('2011-01-01','YYYY-MM-DD'),'YYYY')-7) + (7-TO_CHAR(TRUNC(TO_DATE('2011-01-01','YYYY-MM-DD'),'YYYY'),'D')+1)+(LEVEL-1)*7  当周第一天,
        (TRUNC(TO_DATE('2011-01-01','YYYY-MM-DD'),'YYYY')-7) + (7-TO_CHAR(TRUNC(TO_DATE('2011-01-01','YYYY-MM-DD'),'YYYY'),'D')+1)+(LEVEL-1)*7+6 当周最后一天
    FROM DUAL CONNECT BY LEVEL<=53
    --按照ORACLE标准(WW)
    SELECT LEVEL 周次,TO_DATE('2013-01-01','YYYY-MM-DD')+(LEVEL-1)*7  当周第一天,
        TO_DATE('2013-01-01','YYYY-MM-DD')+(LEVEL-1)*7+
        DECODE((TO_CHAR(TO_DATE('2013-12-31','YYYY-MM-DD'),'DDD')-(LEVEL-1)*7),1,0,2,1,6) 当周最后一天
    FROM DUAL CONNECT BY LEVEL<=53
    这是在网上看到的,数据库中应该用什么标准呢?是(ww)吧
      

  7.   

    周一当第一天的话就把语句中的1改为2就行了,默认2014年1~5号,虽然不足一周但作为第一周
    select 
    greatest(next_day(to_date('2014-01-01','yyyy-mm-dd'),2)-14+42*7
    ,to_date('2014-01-01','yyyy-mm-dd'))
     D from dual;
      

  8.   

    select ecardid,to_date('20'||substr(ecardid,5,2)||'-01-01','yyyy-mm-dd')+(substr(ecardid,7,2)-1)*7  firstday from test_wwl --比如ecardid=32011101220000005066,执行是没有问题的
    但是,放在过程里面,ecardid截取的是di,32011101220000005066根本就没有传进去,但是如果直接换成32011101220000005066,就是正确的了,为什么啊?过程里面的语句是:sqlstr:='create table '||CardTable||' as 
            select ecardid,greatest(next_day(to_date(''20'||substr(ecardid,5,2)||'-01-01'',''yyyy-mm-dd''),2)-14+substr(ecardid,7,2)*7,to_date(''20'||substr(ecardid,5,2)||'-01-01'',''yyyy-mm-dd'')) issuedate
            from  '||tbl_sexit||'
      

  9.   

    字符串拼接问题,加强练习吧
    sqlstr:='create table '||CardTable||' as 
    select '''||ecardid||''',greatest(
    next_day(to_date(''20'||substr(ecardid,5,2)||'-01-01'',''yyyy-mm-dd''),2)-14+'||substr(ecardid,7,2)||'*7
    ,to_date(''20'||substr(ecardid,5,2)||'-01-01'',''yyyy-mm-dd'')) issuedate
            from  '||tbl_sexit||'
      

  10.   

    sqlstr:='create table '||CardTable||' as
            select ecardid,greatest(next_day(to_date(''20''||substr(ecardid,5,2)||''-01-01'',''yyyy-mm-dd''),2)-14+substr(ecardid,7,2)*7,to_date(''20''||substr(ecardid,5,2)||''-01-01'',''yyyy-mm-dd'')) issuedate
            from  '||tbl_sexit;
    问题已经解决了,ecardid不是参数,问题出现在''||substr(ecardid,5,2)||''