我使用此查询获取周数,但第一周输出错误 但实际上它是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
答案 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.