使用oracle日期函数获取周数?

时间:2016-08-01 07:09:05

标签: oracle date

我使用此查询获取周数,但第一周输出错误 但实际上它是2016年8月的第二周。

   select 
        to_char(TO_DATE('07-08-2016','dd-mm- rrrr'), 'w') week ,
      to_char(TO_DATE('07-08-2016','dd-mm- rrrr'), 'd') day-no,
      to_char(TO_DATE('07-08-2016','dd-mm- rrrr'), 'Day') Day 
      from dual

1 个答案:

答案 0 :(得分:0)

仔细阅读:

  

W - 月份周(1-5),其中第1周从第一天开始   月份和结束于第七次

WITH t AS (SELECT TO_DATE ('07-07-2016', 'dd-mm-rrrr') d FROM DUAL)
SELECT TO_CHAR (d, 'w') week, 
       TO_CHAR (d, 'd') day_no, 
       TO_CHAR (d, 'Day') Day
  FROM t

WEEK DAY_NO DAY       
---- ------ ----------
1    5      Donnerstag
1 row selected.

可以使它成为你想要的,独立于NLS_TERRITORY:

WITH t AS (SELECT TO_DATE ('07-08-2016', 'dd-mm-rrrr') d FROM DUAL)
SELECT trunc(TO_CHAR (d+1, 'j')/7)-trunc(TO_CHAR (trunc(trunc(d,'mm'),'IW')+1, 'j')/7)+1 week,
       TO_CHAR (d, 'd') day_no, 
       TO_CHAR (d, 'Day') Day
  FROM t

      WEEK DAY_NO DAY       
---------- ------ ----------
         2 1      Sonntag   
1 row selected.

但是当月的第一天是星期六时,它会很有趣。你将在这个月的第6周。

WITH t AS (SELECT TO_DATE ('30-11-2014', 'dd-mm-rrrr') d FROM DUAL)
SELECT trunc(TO_CHAR (d+1, 'j')/7)-trunc(TO_CHAR (trunc(trunc(d,'mm'),'IW')+1, 'j')/7)+1 week,
       TO_CHAR (d, 'd') day_no, 
       TO_CHAR (d, 'Day') Day
  FROM t

      WEEK DAY_NO DAY       
---------- ------ ----------
         6 1      Sonntag   
1 row selected.