oracle使用to_char和next_day函数得到本周的第一天和最后一天日期

 

准确来说一个礼拜是从星期日开始到星期六结束的,而我们自己的习惯都是按一个礼拜的第一天为星期一,最后一天为星期日来的。

很多的查询条件和统计都需要求得一周的时间段,也就是星期一到星期日的时间段, 我们用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

你可能感兴趣的:(oracle)