使用to_char和next_day函式得到本週的第一天和最後一天日期

star_guan2008發表於2008-06-06

準確來說一個禮拜是從星期日開始到星期六結束的,而我們自己的習慣都是按一個禮拜的第一天為星期一,最後一天為星期日來的。

很多的查詢條件和統計都需要求得一週的時間段,也就是星期一到星期日的時間段, 我們用to_char和next_day兩個函式分別可以求得第一天和最後一天的日期。

1、TO_CHAR 結合 DECODE、TO_NUMBER 函式求得

/** 使用TO_CHAR(SYSDATE,'D')可以求得當前日期是一週的第幾天 
    得到的結果是星期日開始作為第1天的,
    那麼星期一就是第2天,星期日就是第8天
*/

SELECT TO_CHARSYSDATE ,'YYYY-MM-DD' ) 今天,  
       DECODE(TO_CHAR(SYSDATE,'D'),
              '1','星期日',
              '2','星期一',
              '3','星期二',
              '4','星期三',
              '5','星期四',
              '6','星期五',
              '7','星期六') 星期幾,
        TO_CHARSYSDATE - TO_NUMBERTO_CHAR(SYSDATE,'D') ) + 2,'YYYY-MM-DD' ) 星期一,
        TO_CHARSYSDATE - TO_NUMBERTO_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_CHARSYSDATE ,'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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10742223/viewspace-341803/,如需轉載,請註明出處,否則將追究法律責任。

相關文章