![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
ORACLE中查询条件为varchar2类型字段=number类型时异常
有两个库A和B,有同一张表t,t有个类型为varchar2的字段i。在A中select*fromtwherei=100能正常查询数据,在B中抛异常[invalidnumb...
有两个库A和B,有同一张表t,t有个类型为varchar2的字段i。
在A中 select * from t where i =100 能正常查询数据,在B中抛异常[invalid number]。请教下原因。 展开
在A中 select * from t where i =100 能正常查询数据,在B中抛异常[invalid number]。请教下原因。 展开
7个回答
展开全部
出现错误的原因是varchar2类型列中存储了非number型字符。
解决方法是将number类型使用to_char进行转换,如:
select * from 表名 where 列名 = to_char(number数值)
之所以出现这种错误,是由于oracle的隐式类型转换造成的,
也就是说,oracle在查询时,会根据等式右边的数据类型对
左边的进行类型转换,所以为了避免此类错误及提高查询效率,
在写语句的时候最好是保持数据类型一致。
解决方法是将number类型使用to_char进行转换,如:
select * from 表名 where 列名 = to_char(number数值)
之所以出现这种错误,是由于oracle的隐式类型转换造成的,
也就是说,oracle在查询时,会根据等式右边的数据类型对
左边的进行类型转换,所以为了避免此类错误及提高查询效率,
在写语句的时候最好是保持数据类型一致。
展开全部
因为你写是100 是个数字,oralce会自动 把 i 字段 转化成数字进行比较,那么,如果你 B库的 i 字段里如果有不能转化成数字的数据 就会报这个错了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你是否是在2个库中定义的I的类型不一样?I为varchar的时候是可以判断是否为100的 这个时候的100是一个字符 不是数字。如果要使用数字来进行判断的话 应该使用 to_num(i) = 100
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
那是因为在 B表中存在字符导致的,你用如下语句就不会报错
select * from t where i ='100'
select * from t where i ='100'
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
建议写sql时候sql语句数据类型跟表中保持一致,这样执行效率会高一些的。select * from t where i =‘100 ’,虽然有时oracle会自动转换但会降低效率
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询