sql执行后出现ORA-01722: invalid number
数据库中执行语句:select*fromtable_nameltwhereMOD(vcidname,5)=4;会提示错误ORA-01722:invalidnumber但是...
数据库中执行语句:select * from table_namel t where MOD(vcidname,5)=4;
会提示错误 ORA-01722: invalid number
但是如果将取模操作改成哈希操作:select * from table_namel t where hash(vcidname,5)=4;
则可以正常执行,请问这是什么原因呢?
表table_namel中字段vcidname类型为VARCHAR2,对该字段的取模修改过为MOD(vcidname,‘5’)=‘4’ 和 MOD (TO_NUMBER (vcidname), 5) = 4; 仍然会报异常 展开
会提示错误 ORA-01722: invalid number
但是如果将取模操作改成哈希操作:select * from table_namel t where hash(vcidname,5)=4;
则可以正常执行,请问这是什么原因呢?
表table_namel中字段vcidname类型为VARCHAR2,对该字段的取模修改过为MOD(vcidname,‘5’)=‘4’ 和 MOD (TO_NUMBER (vcidname), 5) = 4; 仍然会报异常 展开
展开全部
我测试了下,ORACLE中,MOD (TO_NUMBER (vcidname), 5) = 4,这个条件是可以查到数据,并有结果的,前提是vcidname字段必须是纯数字的字符串值!
报错的话,估计是你表的字段vcidname中,某些记录包含了非数字的字符,如:abcd1234等;我用一张几百万记录的表,代公式去查都没有问题。
--------------------------------------
例如:select MOD (TO_NUMBER (‘aa1234’), 5) from dual;
就会报ORA-01722: invalid number错误,实际是函数:to_number()报错了。
报错的话,估计是你表的字段vcidname中,某些记录包含了非数字的字符,如:abcd1234等;我用一张几百万记录的表,代公式去查都没有问题。
--------------------------------------
例如:select MOD (TO_NUMBER (‘aa1234’), 5) from dual;
就会报ORA-01722: invalid number错误,实际是函数:to_number()报错了。
追问
T T 原先也以为是这个问题 但是后来把数据清了 只是个空表 直接查询还会报错 所以很费解 另一个字段和它类型一样的查询就木有问题 这个和表字段的设置有啥关系吗?
追答
1、清空表,相当于null值;这种情况我测试,不会报错;结果也是null值;
2、我找了VARCHAR2类型的字段测试,查询MOD (TO_NUMBER (字段), 5),也是成功的;
3、我测试MOD (TO_NUMBER (‘空格’), 5),会报错ORA-01722: invalid number。
------
我是用oracle 10,客户端pl/sql7.0。你可以试着往你的表里,填进去不同类型的数据,看下是什么情况会报错,就比较清楚了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询