oracle数字比较大小遇到空值如何处理

123.7z

oracle数据库表某一列是字符串类型的数字,而且存在空值,我需要将这列的值进行筛选,筛选出大于某个数字的结果。我在sql中已经将空值过滤掉了,查询时只剩下非空的字符串类型的数值,然后我使用to_number将字符串转为数字,此时没有报错,正常情况下就说明已经转换成功了,但是我一加上 to_number(列名)>10的判断就提示无效数字。然后我嵌套一层select * from (查询结果) where 列名>10,仍然提示无效数字。有没有办法解决一下,正则表达式替换掉字符串的做法可能不太行,因为数字带有不确定的小数位数,还有负数的情况

a965d8b14a50fbbb94eeeff99f039fa.jpg

做大做强 发布于 2022-7-1 11:38 (编辑于 2022-7-1 15:10)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
做大做强Lv4见习互助
发布于2022-7-4 14:51

百度了很久,看到一个文档说明了问题原因。oracle对表查询的时候,执行限制条件的时候,不管是嵌套还是未嵌套,都是并发的,所以我在比较数值大小的时候,尽管已经限制了为空,但是由于这个原因,它还是会将空数据进行比较,导致报错,选了文档给出的第三种方法来解决,也是group by xxx having. 地址如下

https://blog.csdn.net/fanbaodan/article/details/108381590 

最佳回答
0
Z4u3z1Lv6专家互助
发布于2022-7-1 11:39

nvl(字段,0)

  • 做大做强 做大做强(提问者) 试过,不行,不加最后的列名>10就没有问题,一加上还是会报错无效数字。给我的感觉就是一加上这个列名>10的限制就是直接查询的全表数据,我前面的限制就没效果了或者说优先级被降低了
    2022-07-01 11:41 
  • 让过去 让过去 回复 做大做强(提问者) 你把后面的条件也改成NUL(列名,0)>10不行嘛
    2022-07-01 11:43 
  • 让过去 让过去 回复 做大做强(提问者) NVL打错了
    2022-07-01 11:43 
  • 做大做强 做大做强(提问者) 回复 让过去 不行,都会报错
    2022-07-01 11:44 
  • 让过去 让过去 回复 做大做强(提问者) 怪,测试了一下空值比较数字并不会报错,但是空格会报错,确认一下是空值还是空格吧。。。
    2022-07-01 11:50 
最佳回答
0
让过去Lv6中级互助
发布于2022-7-1 11:49(编辑于 2022-7-1 11:50)

--

最佳回答
0
CD20160914Lv8专家互助
发布于2022-7-1 12:09(编辑于 2022-7-1 15:15)

1、猜测这个空值不是空格。。也不是null。而是有可能从网页或者其它地方写入进去的。它里有一个特殊的字符。。这个字符很特殊。。。是制表符。。它可能在中间,有可能在最左边。有可能在最右边。。你可以把这一列数据单独导出来不要做任何处理。放在excel中。。然后上传。。我帮你测试看一下是不是我说的这个字符。如果是的话。处理起来相对麻烦一些。

select t.* from (

select 

以前的所有字段,

nvl(参数值,0) as 参数值

 from 表

 ) t

where t.参数值>0

  • 做大做强 做大做强(提问者) 上传了
    2022-07-01 15:10 
  • CD20160914 CD20160914 回复 做大做强(提问者) 我看你上传的内容没有特殊字段。只有null。。那再套一层子查询看一下。。
    2022-07-01 15:13 
  • CD20160914 CD20160914 回复 做大做强(提问者) 上面更新了语句。你参考一下。
    2022-07-01 15:15 
  • CD20160914 CD20160914 回复 做大做强(提问者) 我把你上传的数据。。除去null以外。。在数据库中模拟 。。用to_number转换是没有问题的
    2022-07-01 15:22 
  • 做大做强 做大做强(提问者) 回复 CD20160914 ,,,,去除null之后用to_number我这边也没有问题,只是对他进行计算的时候会提示无效数字
    2022-07-01 15:27 
  • 2关注人数
  • 850浏览人数
  • 最后回答于:2022-7-4 14:51
    请选择关闭问题的原因
    确定 取消
    返回顶部