Oracle-为星期一至星期几指定日历日期的星期数

时间:2020-04-29 01:13:50

标签: sql oracle

我有2019年1月1日至今的数据。我想将星期数分配给日期列。该周应从星期一开始,到星期日结束。

但是我使用的功能从2019年1月1日(星期二)开始,作为以下内容的第1周开始日期 to_number(to_char(to_date(CALENDAR_D,'dd-mm-yyyy'),'ww'))

如果我将“ ww”替换为“ iw”,则从一周的第一个星期四开始。

我希望周期为星期一至星期日,并将2019年的第一个星期一作为我第一周的第一天。

预期产量

Calendar_d       Week Number
01/01/2019        Any Number (Tuesday)
01/02/2019        Any Number
01/03/2019        Any Number
01/04/2019        Any Number
01/05/2019        Any Number
01/06/2019        Any Number (Sunday)
01/07/2019            1
01/08/2019            1
01/09/2019            1
01/10/2019            1
01/11/2019            1
01/12/2019            1
01/13/2019            1
01/14/2019            2

1 个答案:

答案 0 :(得分:0)

您可以使用next_day()和日期算术:

select floor((datecol - next_day(date '2019-01-01', 'Monday')) / 7) + 1 as weeknum

或者,如果它在表中,则可以使用窗口函数:

select t.datecol,
       sum(case when to_char(datecol, 'DY') = 'MON' then 1 else 0 end) over (partition by to_char(datecol, 'YYYY') order by t.datecol) as weeknum
from t
where t.datecol >= date '2019-01-01'