【问题标题】:Convert week of the year to date in oracle sql在oracle sql中将一年中的一周转换为日期
【发布时间】:2020-09-08 09:32:50
【问题描述】:

如何在 Oracle SQL 中使用一年中的星期来获取日期?

我需要搜索在本周开始之后创建的条目。目前,我通过 select to_char(sysdate,'WW') from dual; 获得一年中的一周,但我不能这样做

select * from table where date > to_date(to_char(sysdate,'WW'), 'WW') 因为我得到了

ORA-01820: format code cannot appear in date input format
01820. 00000 -  "format code cannot appear in date input format"
*Cause:    
*Action:

【问题讨论】:

  • 格式 WW 表示:一年中的第几周 (1-53),其中第 1 周从一年的第一天开始,一直持续到一年的第七天。 - 这就是你要找的吗?

标签: sql oracle datetime where-clause


【解决方案1】:

不需要转成字符串再转回来,可以使用truncate:

select * from table where date > trunc(sysdate,'WW')

阅读有关the trunc() functionhow the format model is applied 的更多信息。

请注意,WW 给您的日期与一年中的第一天相同,所以现在这将给出 2020-09-02,即星期三 - 可能不是您所期望的。当然,这取决于您的要求,但您可能希望与总是从星期一开始的 IW 合作,并会给出 2020-09-07。如果您有不同的开始日期,您可以增加或减少一天,例如如果您的一周从星期日开始。

【讨论】:

    【解决方案2】:

    根据 ORA-doc:

    ORA-01820:格式代码不能出现在日期输入格式中

    原因:日期规范包含无效的格式代码。输入日期时只能指定以下内容:年、月、日、小时、分钟、秒、儒略日、> A.M./P.M.和 B.C./A.D.

    操作:从日期规范中删除无效的格式代码。

    您不能将 weeknum 传递给 to_date() 函数。例如,您可以执行以下操作

    select * from table where date > (next_day(trunc(sysdate), 'SUNDAY') - 7)
    
    

    基本上,next_day 返回满足指定工作日的第一个日期。假设现在是 2020 年 9 月 7 日星期一,next_day 将返回您未来最接近的星期天,即 2020 年 9 月 13 日,因此您需要减去 7 才能获得本周开始的日期。 You can read more about it here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-03
      • 1970-01-01
      • 2018-01-14
      相关资源
      最近更新 更多