使用奇怪的公司规则从 SQL 中的日期获取周#

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

我正在尝试将日期转换为 SQL 中的周数。我需要在通过 DBeaver 和 SAS 查询的 DB2 和 Redshift 中实现它。 weekpart 函数都不遵循我们的规则,并且我们不允许在任何数据库中创建查找表,因此该团队一直在使用大量 case 语句作为解决方法(52 个 when 语句/年)。

我一直在努力想出一个解决方案,而不是许多不同的案例陈述。公司有一个特殊的规则,但事实证明很难执行。首先,这里有一些简单的规则:

  1. 周从周五开始
  2. 周上限为 52。如果有第 53 周,则将其算作第 52 周的一部分。
  3. 第 52 周总是在 12/31 结束
  4. 第 1 周总是从 1 月 1 日开始

这是我正在努力解决的问题:

  1. 如果第 1 周只有 3 天,则将第 2 周的所有天都包括在第 1 周中,因此从当年的所有未来周中减去 1。

我通过使用每年的 case 语句和数学来减少他们使用的 case 语句的大小,但我猜这将需要更长的时间来执行,而且我仍然必须为每年编写一个 case 语句。这是我想出的一些“伪代码”。

case 
  --repeat start here for each year
    when year(date_col) = 2023 then
        case 
            when date_col <= %last_day_of_week_1_2023% then 1
            else min(int(datediff(day, %last_day_of_week_1_2023%, date_col) / 7 + 2),52)
        end
 --repeat end here for each year

有没有办法在没有每年案例陈述的情况下实施所有这些规则?

sql db2-luw
© www.soinside.com 2019 - 2024. All rights reserved.