感觉很是奇怪:
数据库中的日期: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类型,代码如下 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
也就是前面这个几个月都是无效的月份,为什么?
数据库中的日期: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类型,代码如下 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
也就是前面这个几个月都是无效的月份,为什么?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货