> ORA-01841: (full) year must be between -4713 and +9999, and not be 0 及自定义my_to_date函数

oracle使用to_date进行varchar2字段时间进行转换时发现此错误:

ORA-01841: (full) year must be between -4713 and +9999, and not be 0

导致原因:时间字段中存在非法内容,比如非正常时间字符,带了毫秒,或者乱码文字,纯空格等原因

本次我遇到的是sDate字段有空格,原因为原SQL库的’’空字符字段,转Oracle时转成了空格’ ‘,导致to_date失败。

解决方法:

1,删除sDate字段内容为空格的值

2,Trim(sDate)

另外,还可以自己写一个my_to_date函数,实现非法字符异常的规避

函数如下:

  1. CREATE OR REPLACE FUNCTION my_to_date( p_str IN VARCHAR2,
  2. p_format IN VARCHAR2 )
  3. RETURN DATE
  4. IS
  5. BEGIN
  6. RETURN to_date( p_str, p_format );
  7. EXCEPTION
  8. WHEN OTHERS
  9. THEN
  10. RETURN NULL;
  11. END;

这样再调用my_to_date时不再会抛出异常

发表评论

表情:
评论列表 (有 0 条评论,71人围观)

还没有评论,来说两句吧...

相关阅读