数据库日期相关

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
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值