关于字符串转数字查询中遇到的问题

悬崖跳舞被人砍 2014-11-20 03:23:36
我的语句如下:
SELECT * FROM base
WHERE city = 'ZS'
AND to_number(wapflow) > 1000

在执行时报错说ORA-01722:无效数字
我猜想是wapflow字段中出现了字母,导致报出这种错误,请问有没有什么方法让我可以查询出全部数据,我想到的解决方向有两个:
1.找出wapflow中存在字母的行,赋wapflow空值或删除改行
2.执行上述语句出现错误时,自行忽略该错误继续向下执行
有没有大神能够解决这个问题
...全文
176 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
布丁88 2014-11-22
  • 打赏
  • 举报
回复
值要么不是數據字符串,要么不是字符串。
Tiger_Zhao 2014-11-20
  • 打赏
  • 举报
回复
--空字符串删除
DELETE base WHERE wapflow = ''
--wapflow中有非数字字符的删除
DELETE base WHERE LENGTH(TRANSLATE(wapflow,'1234567890','')) > 0

我爱大家369 2014-11-20
  • 打赏
  • 举报
回复
奥,学习了,谢谢,结贴吧
bw555 2014-11-20
  • 打赏
  • 举报
回复
引用 9 楼 lifang123456 的回复:
[quote=引用 7 楼 bw555 的回复:] [quote=引用 3 楼 lifang123456 的回复:] SELECT * FROM base WHERE LENGTH(wapflow) < LENGTHB(wapflow) 比较一下看有没有汉字 OR select * from t1 where not regexp_like(a,'^[[:digit:]]+$'); 查一下不是数字的行
楼上的数字应该是指考虑了整形,未考虑正负号及小数点的情况 补一个通用版的数字正则表达式
regexp_like(wapflow,'^(\+|-)?[0-9]+(\.[0-9]+)?$')
[/quote] 考虑了,可以处理符号和小数,那个图片帖子请版主删除了吧[/quote] 以下是测试结果,你的正则表达式对存在小数的数字是无法匹配的
SQL> select 1 from dual where regexp_like('1.1','^[[:digit:]]+$');

未选定行

SQL> select 1 from dual where regexp_like('1.1','^(\+|-)?[0-9]+(\.[0-9]+)?$');

         1
----------
         1

SQL>
我爱大家369 2014-11-20
  • 打赏
  • 举报
回复
引用 7 楼 bw555 的回复:
[quote=引用 3 楼 lifang123456 的回复:] SELECT * FROM base WHERE LENGTH(wapflow) < LENGTHB(wapflow) 比较一下看有没有汉字 OR select * from t1 where not regexp_like(a,'^[[:digit:]]+$'); 查一下不是数字的行
楼上的数字应该是指考虑了整形,未考虑正负号及小数点的情况 补一个通用版的数字正则表达式
regexp_like(wapflow,'^(\+|-)?[0-9]+(\.[0-9]+)?$')
[/quote] 考虑了,可以处理符号和小数,那个图片帖子请版主删除了吧
bw555 2014-11-20
  • 打赏
  • 举报
回复
引用 3 楼 lifang123456 的回复:
SELECT * FROM base WHERE LENGTH(wapflow) < LENGTHB(wapflow) 比较一下看有没有汉字 OR select * from t1 where not regexp_like(a,'^[[:digit:]]+$'); 查一下不是数字的行
楼上的数字应该是指考虑了整形,未考虑正负号及小数点的情况 补一个通用版的数字正则表达式
regexp_like(wapflow,'^(\+|-)?[0-9]+(\.[0-9]+)?$')
  • 打赏
  • 举报
回复
忘了讲了,wapflow的数据类型是字符串。
  • 打赏
  • 举报
回复
引用 1 楼 sppeng 的回复:
把1000改成'1000'
这个一开始尝试过 ,但是查询结果中出现了小于1000 的,字符串直接比大小,应该不行吧
我爱大家369 2014-11-20
  • 打赏
  • 举报
回复
SELECT * FROM base WHERE LENGTH(wapflow) < LENGTHB(wapflow) 比较一下看有没有汉字 OR select * from t1 where not regexp_like(a,'^[[:digit:]]+$'); 查一下不是数字的行
bw555 2014-11-20
  • 打赏
  • 举报
回复
考虑利用正则表达式进行过滤
ray_suen 2014-11-20
  • 打赏
  • 举报
回复
把1000改成'1000'

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧