最简单的是使用
/* Formatted on 2009/12/02 16:01 (Formatter Plus v4.8.8) */
SELECT TO_CHAR (TO_DATE ('2009-12-02', 'YYYY-MM-DD'), 'WW')
FROM DUAL;
不过to_char()函数在计算一年中第几周是从该年的1月1日开始的。
以下SQL 能得到正确的自然周数.
/* Formatted on 2009/12/02 15:31 (Formatter Plus v4.8.8) */
SELECT TO_CHAR
(DECODE
(SIGN
( ( TO_DATE ('2009-12-02', 'YYYY-MM-DD')
+ TO_NUMBER
(DECODE (TO_CHAR (TRUNC (TO_DATE ('2009-12-02',
'YYYY-MM-DD'
),
'YYYY'
),
'D'
),
'1', '8',
TO_CHAR (TRUNC (TO_DATE ('2009-12-02',
'YYYY-MM-DD'
),
'YYYY'
),
'D'
)
)
)
- 2
)
- LAST_DAY (TO_DATE ('2009-12-02', 'YYYY-MM-DD'))
),
1, LAST_DAY (TO_DATE ('2009-12-02', 'YYYY-MM-DD')),
( TO_DATE ('2009-12-02', 'YYYY-MM-DD')
+ TO_NUMBER (DECODE (TO_CHAR (TRUNC (TO_DATE ('2009-12-02',
'YYYY-MM-DD'
),
'YYYY'
),
'D'
),
'1', '8',
TO_CHAR (TRUNC (TO_DATE ('2009-12-02',
'YYYY-MM-DD'
),
'YYYY'
),
'D'
)
)
)
- 2
)
),
'WW'
)
FROM DUAL;
本文提供了一种使用复杂的SQL语句来计算指定日期属于一年中的哪一周的方法。相较于简单的TO_CHAR函数,这种方法考虑了从周一开始的自然周划分方式。
839

被折叠的 条评论
为什么被折叠?



