2013-07-19 35 views
0

我想使用to_number函数将varchar列转换为数字,但我在理解Oracle尝试执行SQL的顺序时遇到了一些问题。Oracle - 将to_number函数应用于varchar列

声明如下所示;

select * from table where column is not null and to_number(column, '999.9') > 20 

当Oracle执行此操作时,会引发无效的数字异常。我知道Oracle使用某种关系代数公式优化了SQL语句,但是有人能告诉我如何安全地使用to_number运算符来实现我的目标吗?

+3

列中有一些非空值无法转换为数字 –

+0

为什么非空值是一个问题? – cduggan

+0

,因为空值是由'不是空'(我认为to_number也不会窒息他们,但只是通过null) – Thilo

回答

3

有人能告诉我如何安全地使用to_number操作符来实现我的目标吗?

不幸的是,在申请to_number之前,您必须先设置first filter out the rows with non-numerical data。转换函数本身是“不安全的”,如果您愿意,它会使整个查询崩溃在一个无效输入上。