Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1339199
  • 博文数量: 169
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 3800
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-30 13:00
个人简介

About me:Oracle ACE pro,optimistic,passionate and harmonious. Focus on ORACLE,MySQL and other database programming,peformance tuning,db design, j2ee,Linux/AIX,Architecture tech,etc

文章分类

全部博文(169)

文章存档

2024年(24)

2023年(28)

2022年(43)

2020年(62)

2014年(3)

2013年(9)

分类: Oracle

2022-04-12 09:58:03

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.
阅读(2345) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~