我有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
答案 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'