Oracle
/
PPAS
- add_months()函数 参数 负数 代表 往前 正数 代表 往后。
- select to_char(add_months(trunc(sysdate),-1),'yyyymm') from dual;
- --上一个月
- select to_char(add_months(trunc(sysdate),1),'yyyymm') from dual;
- --下一个月
获取月份最后一天
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