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; 仍然会报异常
展开
 我来答
guoguodragon
2014-03-21 · TA获得超过227个赞
知道小有建树答主
回答量:73
采纳率:0%
帮助的人:89.6万
展开全部
我测试了下,ORACLE中,MOD (TO_NUMBER (vcidname), 5) = 4,这个条件是可以查到数据,并有结果的,前提是vcidname字段必须是纯数字的字符串值!

报错的话,估计是你表的字段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。你可以试着往你的表里,填进去不同类型的数据,看下是什么情况会报错,就比较清楚了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式