【问题标题】:previous friday of month每月的上一个星期五
【发布时间】:2020-09-03 16:37:41
【问题描述】:

我正在尝试编写一个查询,该查询将返回上个月的最后一个星期五这是我目前所拥有的。

SELECT sysdate
FROM   DUAL
where (LAST_DAY( SYSDATE ) - INTERVAL '7' DAY,
         'Friday' );

【问题讨论】:

  • 如果您尝试 return 某些东西,它不应该出现在查询的 where 子句中(除了用于此的正确函数之外,和正确的计算)。将其放在where 子句中表明您对SQL 查询的最基本元素有困难;现在尝试更多地关注这些,然后才转向更高级的主题。

标签: sql database oracle date select


【解决方案1】:

考虑:

select next_day(trunc(sysdate, 'month') - interval '8' day, 'Friday') from dual

理由:

  • trunc(sysdate, 'month') 为您提供当月的第一天

  • 我们将该值偏移 8 天,因此我们可以将日期设为上个月月底前 7 天

  • 那么,next_day() 返回此日期之后的下一个星期五,即当月的最后一个星期五

【讨论】:

  • 我正要发布同样的内容。
  • @GordonLinoff:对我来说,这意味着我找到了最好的解决方案(或非常接近)!
  • next_day 的参数总是用英文吗?
  • @wolφi from docs 参数 char 必须是会话日期语言中的一周中的某一天
  • @micklesh 刚刚检查了这一页,但跳过了这句话,叹息。谢谢!
【解决方案2】:

试试这个:

SELECT NEXT_DAY( LAST_DAY( TO_DATE('01-' || TO_CHAR(SYSDATE, 'MON-YYYY')) - 1 ) - INTERVAL '7' DAY, 'FRIDAY' ) FROM DUAL;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-04
    相关资源
    最近更新 更多