Oracle 隐式数据类型转换的坑
在执行sql时 遇到了一个转换类型的错误 ORA-01722: invalid number
... LEFT JOIN A ON B.BUSINESSID = A.ID ...
原因是在进行隐式数据类型转换时,BUSINESSID 字段是 VARCHAR2类型,其中有些业务数据包含了非数字字符,导致转换报错
可以使用下面的sql查哪些数据的字段包含了非数字
select * from B where not regexp_like (BUSINESSID, '^(+|[0-9]+)$')
解决过程中查找的一些文章
ORACLE隐式类型转换 - 潇湘隐者 - 博客园 (cnblogs.com)
oracle隐式转换的规则_oracle隐式转换规则-CSDN博客
最终的解决办法转换类型后在进行比较运算 TO_CHAR(A.ID) 并建立索引
但是如果把条件换位置,就不会报错了,
ON A.ID = B.BUSINESSID
有待深入研究....
同理 ORDER BY 排序 也要转换为 NUMBER类型
同时注意转换类型后的效率问题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!