数据库中的日期计算为日期加上特定月份
为日期加上特定月份--add_months()函数
对于一个日期型来说,一个常见应用为添加固定月数。add_months函数可以实现日期和月份的计算。它可以在给定的日期上添加相当于月份的整数,然后重新计算日期。
【示例】将现在存在job_history表中存储了员工的入职日期和辞职日期,现在将员工辞职日期推后一个月,那么,可以利用add_months()函数自动计算员工的离职日期。
SQL>
select employee_id,end_date
,add_months(end_date, 1) from
job_history ;
EMPLOYEE_ID
END_DATE
ADD_MONTHS(END_DATE,1)
--------------
----------------- ----------------------
102
24-7月
-98
24-8月
-98
101
27-10月-93
27-11月-93
101
15-3月
-97
15-4月
-97
201
19-12月-99
19-1月
-00
114
31-12月-99
31-1月
-00
122
31-12月-99
31-1月
-00
200
17-6月
-93
17-7月
-93
176
31-12月-98
31-1月
-99
176
31-12月-99
31-1月
-00
200
31-12月-98
31-1月
-99
10 rows selected
|
将该数据插入到数据库中,即可在系统中实现员工离职的预警信息。
但是,为日期加上特定月份时,存在一个问题。因为在一年之中,各个月的天数并不相同。因此在添加特定月份时,需要注意Oracle的特殊处理方式。比如,现在将“2012-2-11”日期,向后推一个月。具体实现方如下所示。
SQL> select
add_months(to_date('2012-2-11', 'YYYY-MM-DD'), 1) new_date1 from
dual;
NEW_DATE1
-------------------------
11-3月
-12
1 rows
selected |
2012年二月份有29天。当我们利用2012-2-11日添加一个月时,2012年3月11日是一个有效日期,因此返回值为2011-3-12。但是,2012年2月29日是2月份的最后一天,为该日期添加一个月之后,返回值为3月份的最后一天,如下所示。
SQL> select
add_months(to_date('2012-2-29', 'YYYY-MM-DD'), 1) new_date from
dual;
NEW_DATE1
-------------------------
31-3月
-12
1 rows
selected
|
同样的,当直接增加月份之后的日期为非法日期时,Oracle将返回该月的最后一天。
SQL>select
add_months(to_date('2012-1-30', 'YYYY-MM-DD'), 1) new_date1 from
dual
NEW_DATE1
-------------------------
29-2月
-12
1 rows
selected
SQL> select add_months(to_date('2012-1-31',
'YYYY-MM-DD'), 1) new_date from dual;
NEW_DATE1
-------------------------
29-2月
-12
1 rows
selected |
在该例中,2012-1-30、2012-1-31添加一个月之后,都将返回2012-2-29。
关键字:数据库中的日期计算为日期加上特定月份
日期计算
数据库
加上特定月份
加载中,请稍候......