暂无图片
Oracle数据库查询报错:ORA-01722 invalid number
我来答
分享
暂无图片 匿名用户
Oracle数据库查询报错:ORA-01722 invalid number

两个数据库,表结构一样同样执行

SELECT *   FROM a WHERE c = TO_NUMBER(substr('X00034323423  ',2,8));

时,一个数据库允许执行,另外一个数据库报错“ORA-01722 invalid number”这是怎么回事。c字段是字符格式,但是里面的内容都是纯字符。
不是纯字符,是纯数字。

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
三笠丶
暂无图片

如果发生 ORA-01722 错误,可能的原因有两种:

  • 1)执行的sql语句中包含显示或者隐式的类型转换,将字符串转换到数字类型的时候失败,(因为)字符内容包含非数字字符。

解决方法:检查SQL语句是否包含对字段类型的转换。

  • 2)将一个字符(varchar2)字段绑定(DefineByPos)到数字(number)类型,从而在取结果时,转换失败。

解决方法:检查绑定变量和对应的字段是否顺序对应,数据类型对应。

SELECT * FROM a WHERE to_number(c) = TO_NUMBER(substr('X00034323423 ',2,8));

试试把 c 字段转换成 数字型。

希望对你有所帮助,觉好标个正确答案✅,谢谢~

暂无图片 评论
暂无图片 有用 0
暂无图片
Uncopyrightable

to_number转换成数字,然后与字符相等?有点逻辑不通?

select substr('X00034323423 ',2,8),c from a;

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏