加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

数据库中的日期计算为日期加上特定月份

(2013-03-11 13:14:24)
标签:

日期计算

数据库

特定月份

it

分类: 数据库

    数据库中的日期计算为日期加上特定月份


    为日期加上特定月份--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。


    关键字:数据库中的日期计算为日期加上特定月份   日期计算     数据库    加上特定月份

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有