準確來說一個禮拜是從星期日開始到星期六結束的,而我們自己的習慣都是按一個禮拜的第一天為星期一,最後一天為星期日來的。
很多的查詢條件和統計都需要求得一周的時間段,也就是星期一到星期日的時間段, 我們用to_char和next_day兩個函數分別可以求得第一天和最後一天的日期。
1、TO_CHAR 結合 DECODE、TO_NUMBER 函數求得
/** 使用TO_CHAR(SYSDATE,'D')可以求得當前日期是一周的第幾天
得到的結果是星期日開始作為第1天的,
那麼星期一就是第2天,星期日就是第8天
*/
SELECT TO_CHAR( SYSDATE ,'YYYY-MM-DD' ) 今天,
DECODE(TO_CHAR(SYSDATE,'D'),
'1','星期日',
'2','星期一',
'3','星期二',
'4','星期三',
'5','星期四',
'6','星期五',
'7','星期六') 星期幾,
TO_CHAR( SYSDATE - TO_NUMBER( TO_CHAR(SYSDATE,'D') ) + 2,'YYYY-MM-DD' ) 星期一,
TO_CHAR( SYSDATE - TO_NUMBER( TO_CHAR(SYSDATE,'D') ) + 8,'YYYY-MM-DD' ) 星期日
FROM DUAL
2、NEXT_DAY 結合 SUBSTR 函數求得
/** SUBSTR代替DECODE函數
NEXT_DAY 函數可以指定當前日期的下一個星期幾的日期
比如:今天是11-25日,星期六,那麼 NEXT_DAY(sysdate,'星期一')
得到的日期就是11-27,那麼這個星期一的日期就是 11-27 減去 7天
而星期日的日期就是11-27減去1天
*/
SELECT TO_CHAR( SYSDATE ,'YYYY-MM-DD' ) 今天,
'星期'||SUBSTR('日一二三四五六',TO_NUMBER(TO_CHAR(SYSDATE,'D')),1) 星期幾,
TO_CHAR(NEXT_DAY(sysdate,'星期一') - 7,'YYYY-MM-DD') 星期一,
TO_CHAR(NEXT_DAY(sysdate,'星期一') - 1 ,'YYYY-MM-DD') 星期日
FROM DUAL