有没有办法从 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
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