我正在使用Oracle 9i数据库,并且希望在函数内获取表示一周开始的时间戳,即最近的星期一,即00:00:00。在oracle SQL中,如何获取代表一周开始的时间戳?
我知道代表当天开始的时间戳是TO_TIMESTAMP(SYSDATE)
。
我正在使用Oracle 9i数据库,并且希望在函数内获取表示一周开始的时间戳,即最近的星期一,即00:00:00。在oracle SQL中,如何获取代表一周开始的时间戳?
我知道代表当天开始的时间戳是TO_TIMESTAMP(SYSDATE)
。
您可以使用函数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; – 2013-04-29 22:41:39
+1使用next_day – xQbert 2013-04-29 22:54:50
获取一周的开始应与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;
to_char(sysdate,'d') - 2看起来应该会引发异常。 – 2013-04-30 00:05:32
@danbracuk它不适合我。我在11g环境下运行它没有9可用。 – xQbert 2013-04-30 01:46:07
可以截断日期周一:
select trunc(sysdate, 'IW') FROM DUAL;
你想下周一,或当前周的星期一? – 2013-04-29 22:34:47
本周的星期一。 – 2013-04-29 22:35:16