我需要计算两个日期之间的连续周数,此时我可以通过使用
来部分完成select
(next_day(TO_DATE('01-01-1994', 'DD/MM/YYYY'), 'MONDAY')-next_day(TO_DATE('01-01-1995',
'DD/MM/YYYY'), 'MONDAY'))/7 countinous_weeks
from dual;
我在这两个日期之间已经过了52周,但是当我查看上周的01-01-1994'我得到53周。
select
to_char(TO_DATE('31-12-1994', 'DD/MM/YYYY'),'ww') as last_week_test
from dual;
理解为什么会发生这种情况是相当明显的,但如果有人能想出一种连续计算周数而不必使用next_day的方法,我将不胜感激,因为这是我认为问题所在。
非常感谢提前提示。
答案 0 :(得分:1)
您可以按天使用trunc
功能:
select (trunc(TO_DATE('01-01-1994', 'DD/MM/YYYY'),'d')-trunc(TO_DATE('01-01-1995',
'DD/MM/YYYY'),'d'))/7 countinous_weeks from dual;
你不应该使用next_day
,因为你可以离开本周。我希望这会有所帮助。
答案 1 :(得分:0)
我猜它正在发生,因为你在第二种情况下有效地将周数提高了几周,例如你的第一个案例就是你想要的工作方式吗?
如果您正在寻找整周,那么第一个答案是正确的,如果您正在寻找所有周,那么如果有余数加1?
e.g。
select countinous_weeks, decode(countinous_weeks-52,0,trunc(countinous_weeks),trunc(countinous_weeks)+1)
from (
select (TO_DATE('01-01-1995', 'DD/MM/YYYY') - TO_DATE('01-01-1994','DD/MM/YYYY'))/7 countinous_weeks
from dual) wks