日期:2014-05-17  浏览次数:21619 次

ORA-01843: 无效的月份
感觉很是奇怪:
数据库中的日期:

1996-12-01
1997-12-01
1998-12-01
1999-12-01
2000-12-01
2001-12-01
2002-12-01
2003-12-01
200504
200602
200801
200812
200812
200911
201012
都是varchar类型 ,我把转换成date类型,

代码如下
SQL code

 DECLARE
 v_date DATE;
 v_errmsg VARCHAR2(1000); 
BEGIN
 FOR arec IN (SELECT AIC081 FROM xrsiqj.ic02
WHERE aac001 = '8')LOOP
 BEGIN
 IF LENGTH(arec.aic081) = 6 THEN
   v_date := to_date(arec.aic081,'yyyymm');
 ELSIF  LENGTH(arec.aic081) = 10 THEN
   v_date := to_date(arec.aic081,'yyyymmdd'); 
 ELSE
   v_date := '1234';
 END IF;
 dbms_output.put_line(v_date);
 EXCEPTION 
   WHEN OTHERS THEN
     v_errmsg := SQLERRM;
     dbms_output.put_line(v_errmsg);
 END;    
END LOOP;
END;



结果输出悲剧了:
ORA-01843: 无效的月份
ORA-01843: 无效的月份
ORA-01843: 无效的月份
ORA-01843: 无效的月份
ORA-01843: 无效的月份
ORA-01843: 无效的月份
ORA-01843: 无效的月份
ORA-01843: 无效的月份
01-4月 -05
01-2月 -06
01-1月 -08
01-12月-08
01-12月-08
01-11月-09
01-12月-10
也就是前面这个几个月都是无效的月份,为什么?

------解决方案--------------------
to_date(arec.aic081,'yyyy-mm-dd');