Teradata SQL周号-从1月1日开始的第1周,周与该周的特定日期对齐

问题描述 投票:0回答:1

我在这里的第一篇文章,所以请保持温柔...

我正在尝试在Teradata(SQL)中创建一个星期数变量,该变量执行以下操作:

  • 第1周总是从给定年份的1月1日开始
  • 星期几在指定的星期几增加

例如:如果星期六是星期几?

  • [2019-01-01将是2019年第1周的开始,更改为2019年1月5日的第2周]
  • 2020-01-01将是2020年第1周的开始,更改为2020-01-04的第2周

我已经基于Excel函数提出了以下建议,但是它并没有按预期工作:

ROUND(((DATE_SPECIFIED - CAST(EXTRACT(YEAR FROM DATE_SPECIFIED) || '-01-01' AS DATE) + 1) - ((DATE_SPECIFIED - DATE '0001-01-06') MOD 7 + 1) + 10) / 7) AS REQUIRED_WEEK

- DATE '0001-01-06'部分的最后一位数字与一周中的指定日期相关,其中“ 0001-01-01”将为星期一。

这在某些情况下仍然有效,但是在某些年份中,第一个星期的数字显示为0,应为1,例如2018年1月1日/ 2019年1月1日很好,而2020年1月1日则不是。

将不胜感激地收到任何纠正此问题的想法。

非常感谢,

麦克

sql teradata week-number sql-date-functions
1个回答
0
投票

嗯。 。 。我对Teradata函数有一点时间。但想法是开始second周。这遵循规则:

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

我认为以下逻辑对此进行了计算:

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;

然后,您是从第二周算起还是从一周算起,还是再减去一个星期才能得出第一周真正开始的时间。

© www.soinside.com 2019 - 2024. All rights reserved.