求日期在当月的月次,按自然周计算,即使只有一天也算第一周。 谢谢大家

解决方案 »

  1.   

    TO_CHAR(to_date(time_key,'YYYY-MM-DD HH24:MI:SS'),'W')as WEEK_IN_MONTHoracle 可以这样统计周次 ,但是 是按7天一统计的。
    但是
    希望结果是这样的比如
    现在 8月 1 , 2 号 是第一周   1
    3456789 是第二周   2
    。。
      

  2.   

    SELECT TO_CHAR(SYSDATE,'W') AS "weekOfMon" from dual今天是第四周但是按要求应该是第五周,因为第一周只有2天也算第一周
      

  3.   


    给你个例子:
    SELECT Z,CASE
             WHEN TO_NUMBER(TO_CHAR(Z, 'dd')) >
                  7 - TO_NUMBER(TO_CHAR(TRUNC(Z, 'mm'), 'd')) + 1 THEN
              CEIL((TO_NUMBER(TO_CHAR(Z, 'dd')) +
                   TO_NUMBER(TO_CHAR(TRUNC(Z, 'mm'), 'd')) - 1) / 7)
             ELSE
              1
           END WEEK
      FROM (SELECT TRUNC(SYSDATE, 'mm') + ROWNUM - 1 Z
              FROM DUAL
            CONNECT BY ROWNUM <= 66);
      

  4.   


    简化一下:
    SELECT Z,
           CEIL((TO_NUMBER(TO_CHAR(Z, 'dd')) +
                TO_NUMBER(TO_CHAR(TRUNC(Z, 'mm'), 'd')) - 1) / 7)
      FROM (SELECT TRUNC(SYSDATE, 'mm') + ROWNUM - 1 Z
              FROM DUAL
            CONNECT BY ROWNUM <= 66);
      

  5.   

    to_char(sysdate,'iw')就是该日在本年的第几个自然周to_char(sysdate,'iw')-to_char(trunc(sysdate,'mm'),'iw')+1
    就是该日在本月的第几个自然周
      

  6.   

    用了2个日期测试 2008-08-27 和 2008-06-10, TRY IT ..
    SQL> SELECT TRUNC(SYSDATE) FROM DUAL;TRUNC(SYSDATE)
    --------------
    8/27/2008SQL> 
    SQL> SELECT DECODE(TO_CHAR(TRUNC(SYSDATE, 'MM'), 'D'),
      2                1,
      3                TO_CHAR(SYSDATE, 'W'),
      4                TO_NUMBER(TO_CHAR(SYSDATE, 'W')) + 1) AS "YOUR_WEEKS"
      5    FROM DUAL;YOUR_WEEKS
    ----------------------------------------
    5SQL> SELECT TO_DATE('2008-06-10','YYYY-MM-DD') FROM DUAL;TO_DATE('2008-06-10','YYYY-MM-
    ------------------------------
    6/10/2008SQL> 
    SQL> SELECT DECODE(TO_CHAR(TRUNC(TO_DATE('2008-06-10','YYYY-MM-DD'), 'MM'), 'D'),
      2                1,
      3                TO_CHAR(TO_DATE('2008-06-10','YYYY-MM-DD'), 'W'),
      4                TO_NUMBER(TO_CHAR(TO_DATE('2008-06-10','YYYY-MM-DD'), 'W')) + 1) AS "YOUR_WEEKS"
      5    FROM DUAL;YOUR_WEEKS
    ----------
    2SQL> 
      

  7.   

    2个月的数据只是代表两种不同的情况,hebo2005已经把这两种情况列出来了。