Teradata SQL Week Number - Week 1 starting 1st Jan with weeks aligned to specific day of the week
我在这里的第一篇文章,所以请保持温柔...
我正在尝试在Teradata(SQL)中创建一个星期数变量,该变量执行以下操作:
- 第1周始终从给定年份的1月1日开始
- 周数在一周的指定日期递增
例如:如果星期六是一周中的指定日期:
- 2019-01-01将是2019年第一周的开始,更改为2019-01-05的第二周
- 2020-01-01将是2020年第1周的开始,更改为2020-01-04的第2周
我已经基于Excel函数提出了以下建议,但是它并没有按预期工作:
在某些情况下可以使用,但是在某些年份中,第一个星期的数字显示为0,应为1,例如2018年1月1日/ 2019年1月1日很好,而2020年1月1日不是。
我们将很高兴收到任何纠正此问题的想法。
非常感谢,
迈克
您可以将
1 | (Next_Day(DATE_SPECIFIED,'SAT') - Next_Day(Trunc(DATE_SPECIFIED,'yyyy'),'SAT')) / 7 +1 |
嗯。 。 。我在Teradata函数上花了一周的时间。但想法是开始第二周。这遵循以下规则:
1 2 3 4 5 6 7 8 | Jan 1 weekday (TD) 2nd week Sunday 1 01-02 Monday 2 01-08 Tuesday 3 01-07 Wednesday 4 01-06 Thursday 5 01-05 Friday 6 01-04 Saturday 7 01-03 |
我认为以下逻辑对此进行了计算:
1 2 3 4 5 | SELECT t.*, (CASE WHEN td_day_of_week(CAST(EXTRACT(YEAR FROM DATE_SPECIFIED) || '-01-01' AS DATE) ) = 1 THEN CAST(EXTRACT(YEAR FROM DATE_SPECIFIED) + '-01-02' AS DATE) ELSE EXTRACT(YEAR FROM DATE_SPECIFIED) + 10 - CAST(td_day_of_week(CAST(EXTRACT(YEAR FROM DATE_SPECIFIED) || '-01-01') AS DATE) FROM t; |
那么您是从第二周算起还是从一周算起,再减去一个星期才能得出第一周真正开始的时间。