有没有办法从 Oracle PLSQL 中的 yyyywwd 格式获取日期?

is there a way to get date from yyyywwd format in Oracle PLSQL?

2020425 表示 2020 年第 42 周和该周的第 5 天,即 2020 年 10 月 16 日。我需要一些函数来执行此操作。

ISO 周从星期一开始,因此 2020 年第 42 周的第一天是 2020 年 10 月 12 日星期一。这将使第五天成为 10 月 16 日星期五,而不是 10 月 17 日星期六。

这是一些计算结果为 2020 年 10 月 16 日的表达式。

逻辑是:

  • 1 月 4 日总是第一个 ISO 周。
  • 所以下周一,那个日期之后,是第二个 ISO 周的第一天
  • 我们可以加上给定的周数,减去 2 周,每周算 7 天
  • 最后加上天数,减一,因为我们已经在一周的第一天了

此 SQL 的输入在子查询中提供:

select next_day(to_date(substr(fmt, 1, 4) || '0104', 'YYYYMMDD'), 'MONDAY')
     + (to_number(substr(fmt, 5, length(fmt)-5))-2)*7
     + to_number(substr(fmt, -1)) - 1
from (select '2020425' as fmt from dual);

输出:

16-OCT-20