在oracle中将varchar2转换为数字

Posted

技术标签:

【中文标题】在oracle中将varchar2转换为数字【英文标题】:convert varchar2 to number in oracle 【发布时间】:2019-10-29 12:30:37 【问题描述】:

嗨,我有以下列

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

当小于 1 的结果也是负数时,我需要计算有多少负数 当我使用 TO_NUMBER 函数时,我得到一个错误 ORA-01722 "invalid number"

【问题讨论】:

重复查看> ***.com/questions/4486949/safe-to-number 多少底片?数一数,where result = 'NEGATIVE'。 “结果小于 1”在哪里进入游戏? 【参考方案1】:

'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”之外,我假设您的列中没有任何其他流氓非数字字符串。如果还有其他人,那么您也需要处理它们。

【讨论】:

【参考方案2】:

在 oracle 12.2 及更高版本上,您可以使用on conversion errorto_number 功能如下:

Select 
    Count(1) as result
From your_table
Where your_column = 'NEGATIVE' 
Or to_number(your_column default 1 on conversion error) < 1 ;

干杯!!

【讨论】:

以上是关于在oracle中将varchar2转换为数字的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Oracle 中将毫秒转换为 hh mm ss 格式

Oracle怎样把varchar2型转成number型

求助oracle小写金额转换大写金额的函数

如何在python中将单引号字符串转换为数字[重复]

如何在sql中将数字转换为日期

Oracle怎样把varchar2型转成number型