oracle ORA-01722无效数字

我有一个表table_a里面有一个字段field中保存了用户的编号,编号使用逗号隔开,例如:379,380,386,390,503我做查询select*fromuserw... 我有一个表table_a 里面有一个字段field中保存了用户的编号,编号使用逗号隔开,例如:379,380,386,390,503
我做查询select * from user where user_id in (379,380,386,390,503); 是正确的。
但是当我查询 select * from user where user_id in (select field from table_a where id = 1);时却报oracle ORA-01722无效数字,求高手解答。
展开
 我来答
xckouy
2011-08-25 · TA获得超过1538个赞
知道小有建树答主
回答量:1291
采纳率:0%
帮助的人:870万
展开全部
select * from user where user_id in (select field from table_a where id = 1);
因为你的field 和user_id 类型不一致
你试试下面的可以不
select * from user where user_id in '('+(select field from table_a where id = 1)+')';
追问
谢谢呀, 不可以, 还有其他办法吗?
wangzhiqing999
推荐于2018-02-27 · TA获得超过1.6万个赞
知道大有可为答主
回答量:7048
采纳率:100%
帮助的人:3404万
展开全部
select * from user
where
INSTR( (select ',' || field || ',' from table_a where id = 1), ',' || TRIM(TO_CHAR(user_id )) || ',' ) > 0
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2018-03-30 · TA获得超过9843个赞
知道小有建树答主
回答量:91
采纳率:100%
帮助的人:1.4万
展开全部
  1. 对于两个类型不匹配(一个数字类型,一个非数字类型,同下)的值进行赋值操作;

  2. 两个类型不匹配的值进行比较操作(例如,“=”);

  3. to_number函数中的值,非数字的,比如,to_number('a')肯定是不行的,

  4. to_number('12306')则是正常的。

  5. 要避免这些问题,要做到在写sql语句时就好认真处理好不同类型的问题。

  6. 比如如果要比较的话,同时都用to_number强制转换(to_number(字段a) = to_number(字段b)。

  7. 或者同时转换为字符串类型。

  8. 在语句中使用to_number函数时,要保证值一定是数字格式,或者写好异常处理。

  9. 当我们碰到这个错误提示时,就从所有用到的数字类型的字段开始检查,逐一排查,从而解决问题。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
莫问往事休
2018-06-19
知道答主
回答量:1
采纳率:0%
帮助的人:868
展开全部
select * from user where user_id in (select to_char(field) from table_a where id = 1);
这个错误是因为用数字类型匹配字符串类型,转换成相同类型就可以了
参考oracle 函数 to_char() to_number()
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
clockwise2
2012-09-07 · TA获得超过174个赞
知道小有建树答主
回答量:137
采纳率:100%
帮助的人:47.6万
展开全部
非常好,网上找了一圈这个 where 字段 in 01722无效数字 关键字 这个回答正中要害,解决问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式