【发布时间】:2013-04-23 17:57:28
【问题描述】:
我正在使用 Oracle 9i 数据库,并希望在函数中获取表示一周开始的时间戳,即最近的星期一 00:00:00。
我知道代表当天开始的时间戳是TO_TIMESTAMP(SYSDATE)。
【问题讨论】:
-
你想要下一个星期一,还是本周的星期一?
-
本周的星期一。
标签: sql oracle timestamp oracle9i
我正在使用 Oracle 9i 数据库,并希望在函数中获取表示一周开始的时间戳,即最近的星期一 00:00:00。
我知道代表当天开始的时间戳是TO_TIMESTAMP(SYSDATE)。
【问题讨论】:
标签: sql oracle timestamp oracle9i
您可以使用函数next_day 来获得:
SQL> select next_day(sysdate-7, 'MONDAY') FROM DUAL;
NEXT_DAY
---------
29-APR-13
【讨论】:
一周的开始应该使用trunc(参见docs)。
所以,
select to_timestamp(trunc(sysdate, 'D')) from dual
应该可以。
但是,根据您的 NLS 设置,oracle 一周的第一天很可能是星期日。
【讨论】:
这似乎会在相关星期几前的星期一午夜返回。证明只是玩弄 sysdate 并减去天数......
select case when to_Char(sysdate,'d') = 1 then
trunc(sysdate-6)
else
trunc(sysdate - (to_Char(sysdate,'d')-2))
END
from dual;
【讨论】:
您可以使用以下命令将日期截断为星期一:
select trunc(sysdate, 'IW') FROM DUAL;
【讨论】: