首页 > 解决方案 > 在oracle中将varchar2转换为数字

问题描述

嗨,我有以下专栏

Result
______
1.5
0.27
0.25
NEGATIVE
5.33
0.15
PROBLEM
NEGATIVE
POSITIVE
POSITIVE

我需要计算当小于 1 的结果为负数时有多少个负数 当我使用 TO_NUMBER 函数时我得到一个错误 ORA-01722“无效数字”

标签: sqloracle

解决方案


'NEGATIVE'是字符串而不是数字,因此当您尝试将其转换为数字时会出现 ORA-01722。所以你需要处理这些事件。就像是:

select count(
           case when result = 'NEGATIVE' then 1
                when result != 'PROBLEM' and to_number(result) < 1 then 1
                else null
           end) as tot_negatives
from your_table;

严格来说 0.15 不是负数,因为它大于零,但我已经实现了你的定义。

请注意,除了“NEGATIVE”和“PROBLEM”之外,我假设您的列中没有任何其他流氓非数字字符串。如果还有其他人,那么您也需要处理它们。


推荐阅读