to_number() 使用中遇到问题

     to_number()函数对非数字操作会抛出异常。之前用没有任何问题。只是操作过数据导入。然后再使用就报错。查看数据库发现数据中多了中文字符。

 

同事刘工给出的解决方案是使用多个函数

  select to_number(nvl2(translate(a.security_stock_warehouse, '\1234567890.', '\'),'0',a.security_stock_warehouse)) from dms_goods_stock;

 

 

用\1234567890.替换列中的值,如果能全部替换,则返回空值,说明t.col列全是数字;如果不能全部替换,则说明t.col中包含非数字的值
nvl2(translate(t.col, '\1234567890.', '\'),'0',t.col):
判断translate的返回值是否为空,如果为空,说明是可以转成Number类型;如果不为空,说明不能转成Number类型,指定返回值为0
可以帮助理解上面的函数
 

 

这里先对列中的内容做判断。如果是纯数字则用该列的内容。如果包含非数字,则使用0代替。

上一篇:C++构造函数


下一篇:数据分析之NumPy(四)ndarray运算