> 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函数,实现非法字符异常的规避
函数如下:
CREATE OR REPLACE FUNCTION my_to_date( p_str IN VARCHAR2, p_format IN VARCHAR2 ) RETURN DATE IS BEGIN RETURN to_date( p_str, p_format ); EXCEPTION WHEN OTHERS THEN RETURN NULL; END;
这样再调用my_to_date时不再会抛出异常
本文来自博客园,作者:IT情深,转载请注明原文链接:https://www.cnblogs.com/wh445306/p/16751824.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤