Oracle SQL - 计算两个日期之间的连续周数

时间:2014-04-03 11:25:44

标签: sql oracle

我需要计算两个日期之间的连续周数,此时我可以通过使用

来部分完成
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的方法,我将不胜感激,因为这是我认为问题所在。

非常感谢提前提示。

2 个答案:

答案 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