2013-04-29 41 views
0

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

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

+0

你想下周一,或当前周的星期一? – 2013-04-29 22:34:47

+0

本周的星期一。 – 2013-04-29 22:35:16

回答

4

您可以使用函数next_day吃出:

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

NEXT_DAY 
--------- 
29-APR-13 
+0

谢谢,所以我想: SQL> select to_timestamp(next_day(sysdate-7,'MONDAY'))FROM DUAL; – 2013-04-29 22:41:39

+0

+1使用next_day – xQbert 2013-04-29 22:54:50

0

获取一周的开始应与trunc工作(见docs)。

所以,

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

应该工作。

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

0

这似乎是在星期一之前的星期一在星期几在午夜。证明了只是玩玩SYSDATE和减去天...

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

to_char(sysdate,'d') - 2看起来应该会引发异常。 – 2013-04-30 00:05:32

+0

@danbracuk它不适合我。我在11g环境下运行它没有9可用。 – xQbert 2013-04-30 01:46:07

0

可以截断日期周一:

select trunc(sysdate, 'IW') FROM DUAL; 
相关问题