我正在尝试将日期转换为 SQL 中的周数。我需要在通过 DBeaver 和 SAS 查询的 DB2 和 Redshift 中实现它。 weekpart 函数都不遵循我们的规则,并且我们不允许在任何数据库中创建查找表,因此该团队一直在使用大量 case 语句作为解决方法(52 个 when 语句/年)。
我一直在努力想出一个解决方案,而不是许多不同的案例陈述。公司有一个特殊的规则,但事实证明很难执行。首先,这里有一些简单的规则:
这是我正在努力解决的问题:
我通过使用每年的 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
有没有办法在没有每年案例陈述的情况下实施所有这些规则?