Teradata SQL 周数 - 从 1 月 1 日开始的第 1 周,周数与一周中的特定日期对齐
Posted
技术标签:
【中文标题】Teradata SQL 周数 - 从 1 月 1 日开始的第 1 周,周数与一周中的特定日期对齐【英文标题】:Teradata SQL Week Number - Week 1 starting 1st Jan with weeks aligned to specific day of the week 【发布时间】:2020-02-20 15:24:23 【问题描述】:我在这里的第一篇文章,所以请温柔...
我正在尝试在 Teradata (SQL) 中创建一个星期数变量,它执行以下操作:
第 1 周总是从给定年份的 1 月 1 日开始 周数在一周中的指定日期递增例如:如果星期六是指定的星期几:
2019-01-01 将是 2019 年第 1 周的开始,在 2019-01-05 更改为第 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 年可以,而 2020 年 1 月 1 日则不行。
我们将不胜感激地收到任何纠正此问题的想法。
非常感谢,
迈克
【问题讨论】:
【参考方案1】:您可以在指定日期和当年的 1 月 1 日同时申请 NEXT_DAY
,例如周六作为一周的开始:
(Next_Day(DATE_SPECIFIED,'SAT') - Next_Day(Trunc(DATE_SPECIFIED,'yyyy'),'SAT')) / 7 +1
【讨论】:
嗨@dnoeth - 效果很好。也比我的解决方案优雅得多。!【参考方案2】:嗯。 . .我对 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;
那么你的一周是从第二周开始计算还是再减去一周才能得到第一周真正开始的时间。
【讨论】:
嗨@Gordon - 感谢您的回复。我对您的响应进行了尝试,但无法使其正常工作 - 它一直抛出错误。 它最初会因为语句不完整而失败。我添加了) end) as required_week
,但随后失败并出现 error 3706 - 预期字符串/unicode char 文字和 ) 之间的内容。以上是关于Teradata SQL 周数 - 从 1 月 1 日开始的第 1 周,周数与一周中的特定日期对齐的主要内容,如果未能解决你的问题,请参考以下文章