我正在使用Oracle的to_char()函数将日期转换为星期数(1-53):
select pat_id, pat_enc_csn_id, contact_date, to_char(contact_date,'ww') week, ...
“ ww”开关为我提供了今年1月的日期的这些值:
Date Week 1-Jan-10 1 2-Jan-10 1 3-Jan-10 1 4-Jan-10 1 5-Jan-10 1 6-Jan-10 1 7-Jan-10 1 8-Jan-10 2 9-Jan-10 2 10-Jan-10 2 11-Jan-10 2 12-Jan-10 2
快速查看日历表明这些值应为:
Date Week 1-Jan-10 1 2-Jan-10 1 3-Jan-10 2 4-Jan-10 2 5-Jan-10 2 6-Jan-10 2 7-Jan-10 2 8-Jan-10 2 9-Jan-10 2 10-Jan-10 3 11-Jan-10 3 12-Jan-10 3
如果我使用“ iw”开关而不是“ ww”,则效果不太理想:
Date Week 1-Jan-10 53 2-Jan-10 53 3-Jan-10 53 4-Jan-10 1 5-Jan-10 1 6-Jan-10 1 7-Jan-10 1 8-Jan-10 1 9-Jan-10 1 10-Jan-10 1 11-Jan-10 2 12-Jan-10 2
是否有另一个Oracle函数可以像我期望的那样计算周数,或者我需要编写自己的函数?
编辑
我正在尝试匹配Crystal Reports使用的逻辑。每个整周从星期日开始。一年的第一周从1月1日代表的任何一天开始(例如,在2010年,1月1日是星期五)。
基于此问题,我如何计算给定日期的星期数?,我编写了以下Oracle逻辑:
CASE --if [date field]'s day-of-week (e.g. Monday) is earlier than 1/1/YYYY's day-of-week WHEN to_char(to_date('01/01/' || to_char([date field],'YYYY'),'mm/dd/yyyy'), 'D') - to_char([date field], 'D') > 1 THEN --adjust the week trunc(to_char([date field], 'DDD') / 7) + 1 + 1 --'+ 1 + 1' used for clarity ELSE trunc(to_char([date field], 'DDD') / 7) + 1 END calendar_week