【问题标题】:is there a way to get date from yyyywwd format in Oracle PLSQL? [closed]有没有办法从 Oracle PLSQL 中的 yyyywd 格式获取日期? [关闭]
【发布时间】:2020-10-15 15:02:30
【问题描述】:

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

【问题讨论】:

  • 在 ISO 周中,周从星期一开始,因此 10 月 12 日星期一是一周的第一天,10 月 17 日是同一周的第 6 天。为什么你有不同的感觉?
  • 好吧,我数了 0,1,2,3,4,5... 如果我们数 1 2 3 4 5 你是对的,这是第六天。我将编辑问题。但我需要一个函数或过程。

标签: database oracle date plsql procedure


【解决方案1】:

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

【讨论】:

  • 谢谢你,它工作得很好。我需要这个函数来调用每一行。我现在正在尝试将其转换为函数。
猜你喜欢
  • 2020-11-30
  • 1970-01-01
  • 2013-04-19
  • 2020-05-14
  • 1970-01-01
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多