oracle——TO_YMINTERVAL andADD_MONTHS

今天做关于日期函数的联系,意外的发现了一个可以叫做bug的地方吧。

这个是关于TO_YMINTERVAL()函数的

TO_YMINTERVAL

Syntax

Description of to_yminterval.gif follows
Description of the illustration to_yminterval.gif

Purpose

TO_YMINTERVAL converts a character string of CHARVARCHAR2NCHAR, or NVARCHAR2 datatype to an INTERVAL YEAR TO MONTH type, where char is the character string to be converted.

Examples

The following example calculates for each employee in the sample hr.employees table a date one year two months after the hire date:

SELECT hire_date, hire_date + TO_YMINTERVAL('01-02') "14 months"
   FROM employees;

HIRE_DATE 14 months
--------- ---------
17-JUN-87 17-AUG-88
21-SEP-89 21-NOV-90
13-JAN-93 13-MAR-94
03-JAN-90 03-MAR-91
21-MAY-91 21-JUL-92

上边这段内容明眼人一看编制出自 oracle的 SQL Reference。

 

言归正传,我所说的bug是这样的,我的表里有这么一个日期‘1980-12-29’,我要算一年两个月之后的日期

SELECT TO_DATE('1980-12-29','YYYY-MM-DD')+TO_YMINTERVAL('01-02') FROM DUAL;

这里就使用了TO_YMINTERVAL()函数,结果我郁闷了,‘ORA-01839 :指定月份的日期无效’。

 看了半天找不到原因后来才发现运算结果会出现这么一个日期‘1981-2-29’(运算之后出现了非闰年的2月29所以报错)。
所以以后要使用这个函数的朋友要注意了。
 
当然在这里可以使用另外一个函数ADD_MONTHS('',NUMBER)来代替,他的处理结果是把非闰年的2月29强制转换为2月28,
SELECT ADD_MONTHS(TO_DATE('1980-12-29','YYYY-MM-DD'),14) FROM DUAL;
--------------------------------------------------------
史朋飞
和阳光的人在一起,心里就不会晦暗;
和快乐的人在一起,嘴角就长带微笑;
学最好的别人,做最好的自己。
2012-04-17

转载于:https://www.cnblogs.com/xgpengfei/archive/2012/04/17/TO_YMINTERVAL---ADD_MONTHS.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值