[英]Calculate number of weeks between 2 specific dates in snowflake/sql
我正在尝试获取一年的周数
通常我们可以使用下面的 weekofyear(默认年份,从 1 月 1 日到 12 月 31 日)function 来获取我们过去的日期的周数
select (weekofyear("@date_input")) as week_number,date_input from dual
output-
week_number date_input
40 2020-10-01
40 2020-10-04
.
.
1 2021-01-04
.
.
.
39 2021-09-30
但我的要求是一年中的一周应该从 10 月 1 日开始到 9 月 30 日,当我们通过日期时
my desired output-
week_number date_input
53 2020-10-01
1 2020-10-04
.
.
13 2021-01-04
.
.
.
52 2021-09-30
所以为了实现我上面想要的 output 我正在使用下面的 sql 逻辑并且我在我们传递的日期添加 3 个月并从该日期找到周数
select (weekofyear(dateadd(month,3,"@date-value")))
上面的 sql 在 2021-10-01 到 2021-11-27 以及从 2021-11-28 到 2021-12-06 期间工作正常,周数在 9 天中显示为 9,其中同一周数应该准确为 7 天它来了 9 天
原因是当我们对 2021-11-29 和 2021-11-30 使用 dateadd 3 个月时,3 个多月是 2022 年 2 月,而 2 月没有 29 日和 30 日,因此它显示这两个日期的周数与嗯(2021-11-29 和 2021-11-30)
所以我需要帮助,是否有任何逻辑可以满足我的要求?
请就如何继续执行此逻辑提出建议
注意 - 编辑了问题
您肯定会看到dateadd()
的记录行为
当 date_or_time_part 是年、季度或月(或它们的任何变体)时,如果结果月的天数少于该月的原始日期,则该月的结果日可能与原始日期不同。
我会说你遇到了weekofyear()
的细微差别以及为什么存在WEEK_OF_YEAR_POLICY
参数。
由于这些原因,我认为您不能使用weekofyear()
而是必须实现一个 UDF,并且可能定义您自己的语义来定义 10/1 是否是第 1 周的一部分
提供一点测试 SQL like 很有帮助
with d as (select $1 weeknum, $2::date mydate from (values (53, '2020-10-01'), (1, '2020-10-04'), (13, '2021-01-04'), (52, '2021-09-30')))
select *,weekofyear(mydate)+13,weekofyear(dateadd(week, 13, mydate)),weekofyear(dateadd(month, 3, mydate)) from d
53 2020-10-01 53 53 53
1 2020-10-04 53 53 1
13 2021-01-04 14 14 13
52 2021-09-30 52 52 52
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.