感觉很是奇怪:
数据库中的日期:
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.ic02WHERE 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');