数据库日期相关

Oracle / PPAS 
  1. add_months()函数 参数 负数 代表 往前  正数 代表 往后。  
  2. select to_char(add_months(trunc(sysdate),-1),'yyyymm'from dual;  
  3. --上一个月  
  4. select to_char(add_months(trunc(sysdate),1),'yyyymm'from dual;  
  5. --下一个月  


获取月份最后一天
SELECT LAST_DAY(SYSDATE) FROM DUAL   结果:日期类型
eg:
SELECT LAST_DAY(TO_DATE('20170120','YYYYMMDD')) FROM DUAL  
结果:


获取两个日期间的全部日期:
eg: 计算 2016-12-01 到 2016-12-31 之间的所有日期,预期结果:
数据库日期相关   
ORACLE:

SELECT TO_CHAR(TO_DATE('2016-12-01', 'yyyy-MM-dd') + ROWNUM - 1,
                'yyyy/MM/dd') as WORK_DATE,
        DECODE(TO_CHAR(TO_DATE('2016-12-01', 'yyyy-MM-dd') + ROWNUM - 1, 'D'),
               '1',
               '星期日',
               '2',
               '星期一',
               '3',
               '星期二',
               '4',
               '星期三',
               '5',
               '星期四',
               '6',
               '星期五',
               '星期六') AS WEEKEND
   FROM DUAL
CONNECT BY ROWNUM <=
            trunc(to_date('2016-12-31', 'yyyy-MM-dd') -
                  to_date('2016-12-01', 'yyyy-MM-dd')) + 1


PPAS:

select  date(zz)
    from  generate_series(date_trunc('day',  to_date('20150301',  'yyyymmdd')),
                                              date_trunc('day',  to_date('20150321',  'yyyymmdd')),
                                              '1  day')  as  tt(zz);
  


在Oracle中计算两个日期间隔的天数、月数和年数:

一、天数:
在Oracle中,两个日期直接相减,便可以得到天数;
1 select to_date('08/06/2015','mm/dd/yyyy')-to_date('07/01/2015','mm/dd/yyyy') from dual;

返回结果:36
二、月数:
计算月数,需要用到months_between函数;

1 --months_between(date1,date2)
2 --如果两个日期中“日”相同,或分别是所在月的最后一天,那么返回的结果是整数。否则,返回的结果将包含一个分数部分(以31天为一月计算)
3 select months_between(to_date('01/31/2015','mm/dd/yyyy'),to_date('12/31/2014','mm/dd/yyyy')) "MONTHS" FROM DUAL;
4 返回结果: 1
5 select months_between(to_date('01/01/2015','mm/dd/yyyy'),to_date('12/31/2014','mm/dd/yyyy')) "MONTHS" FROM DUAL;
6 返回结果: 0.032258064516129

1 select abs(trunc(months_between(sysdate , to_date('01/31/2015','mm/dd/yyyy'))))from dual;
2 select ceil(trunc(months_between(sysdate , to_date('01/31/2015','mm/dd/yyyy'))))from dual;
3 select floor(trunc(months_between(sysdate , to_date('01/31/2015','mm/dd/yyyy'))))from dual;
三、年数:
计算年数,是通过计算出月数,然后再除以12;(也许会有更好的办法,目前还不知道)
1 select trunc(months_between(to_date('08/06/2015','mm/dd/yyyy'),to_date('08/06/2013','mm/dd/yyyy'))/12) from dual;
2
3 --返回结果:2