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类型

同时注意转换类型后的效率问题

posted @   gz狗柱  阅读(112)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示