add_months 和interval 的区别

dingjun大师的文章。http://blog.chinaunix.net/uid-7655508-id-3639253.html

也可以参考下http://blog.sina.com.cn/s/blog_854ec93b0101aahp.html

1.ADD_MONTHS函数

1)如果传入的参数是月末,则结果也是月末
2)如果传入的参数的天较大,最终加上N月后,达到的结果日期天没有输入的参数的日期天大,则也是月末
3)其他,天数一样

符合第3点
dingjun123@ORADB> SELECT add_months(DATE'2011-12-31',1)  FROM dual;
ADD_MONTHS
----------
2012-01-31
1 row selected.

符合第1点,因为11月30日是月末,所以返回2011-12-31日
dingjun123@ORADB> SELECT add_months(DATE'2011-11-30',1)  FROM dual;
ADD_MONTHS
----------
2011-12-31
1 row selected.

符合第2点,虽然10-30不是月末,但是+4月到2月最大是29日,返回2月月末
dingjun123@ORADB> SELECT add_months(DATE'2011-10-30',4)  FROM dual;
ADD_MONTHS
----------
2012-02-29
1 row selected.

符合第2点,加5个月,3月月末是31日,未到,因此是3月30日
dingjun123@ORADB> SELECT add_months(DATE'2011-10-30',5)  FROM dual;
ADD_MONTHS
----------
2012-03-30
1 row selected.

2.INTERVAL
 得出与下月相同的天,如果结果超出对应的月份最大天,则不正确
--普通的使用
dingjun123@ORADB> SELECT DATE'2011-12-31'+interval '1' month  FROM dual;
DATE'2011-
----------
2012-01-31
1 row selected.

--12月30日,而不是31日
dingjun123@ORADB> SELECT DATE'2011-11-30'+interval '1' month  FROM dual;
DATE'2011-
----------
2011-12-30
1 row selected.

--报错,因为2月最大是29日,没有30日,此2月是29日
dingjun123@ORADB> SELECT DATE'2011-10-30'+interval '4' month  FROM dual;
SELECT DATE'2011-10-30'+interval '4' month  FROM dual
                       *
ERROR at line 1:
ORA-01839: date not valid for month specified

 --正确,3月30日,而不是31日
dingjun123@ORADB> SELECT DATE'2011-10-30'+interval '5' month  FROM dual
  2  ;
DATE'2011-
----------
2012-03-30
1 row selected.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值