我正在使用 Oracle 9i 数据库,并希望在函数中获取表示一周开始的时间戳,即最近的星期一,00:00:00。
我知道代表当天开始的时间戳是TO_TIMESTAMP(SYSDATE)
.
您可以使用该功能next_day
来获得:
SQL> select next_day(sysdate-7, 'MONDAY') FROM DUAL;
NEXT_DAY
---------
29-APR-13
本周的开始应该可以使用trunc
(请参阅文档)。
所以,
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;