【问题标题】:In oracle SQL, how would you obtain the timestamp representing the start of the week?在 oracle SQL 中,您将如何获取表示一周开始的时间戳?
【发布时间】:2013-04-23 17:57:28
【问题描述】:

我正在使用 Oracle 9i 数据库,并希望在函数中获取表示一周开始的时间戳,即最近的星期一 00:00:00。

我知道代表当天开始的时间戳是TO_TIMESTAMP(SYSDATE)。

【问题讨论】:

  • 你想要下一个星期一,还是本周的星期一?
  • 本周的星期一。

标签: sql oracle timestamp oracle9i


【解决方案1】:

您可以使用函数next_day 来获得:

SQL> select next_day(sysdate-7, 'MONDAY') FROM DUAL;

NEXT_DAY
---------
29-APR-13

【讨论】:

  • 谢谢,所以我想要:SQL> select to_timestamp(next_day(sysdate-7, 'MONDAY')) FROM DUAL;
【解决方案2】:

一周的开始应该使用trunc(参见docs)。

所以,

select to_timestamp(trunc(sysdate, 'D')) from dual

应该可以。

但是,根据您的 NLS 设置,oracle 一周的第一天很可能是星期日。

【讨论】:

    【解决方案3】:

    这似乎会在相关星期几前的星期一午夜返回。证明只是玩弄 sysdate 并减去天数......

    select case when to_Char(sysdate,'d') = 1 then
     trunc(sysdate-6)
    else 
      trunc(sysdate - (to_Char(sysdate,'d')-2))
    END
      from dual;
    

    【讨论】:

    • to_char(sysdate, 'd') - 2 看起来应该抛出异常。
    • @danbracuk 它不适合我。我在没有 9 的 11g 环境中运行它。
    【解决方案4】:

    您可以使用以下命令将日期截断为星期一:

    select trunc(sysdate, 'IW') FROM DUAL;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-18
      • 1970-01-01
      • 2019-07-04
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多