0

有什么方法可以将下面的值 72.86- 转换为数字 -72.86?

4

2 回答 2

3

我知道您已经选择了一个“正确答案”——它也已经有两个赞成票——但这是一个非常糟糕的业余级解决方案。

处理输入的正确方法是简单地使用正确的格式模型和to_number函数。例如:

select to_number('72.86-', '999.99mi') as my_number
from   dual;

 MY_NUMBER
----------
    -72.86

请注意mi格式模型元素 - 它表示“减号,如果存在,则在尾随”。请参阅https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm#i34570

编辑:这是如何在具有混合格式的列上使用相同的正数(注意fm格式修饰符):

select str, to_number(str, 'fm999.99mi') as my_number
from
       (
         select '92.93-' as str from dual union all
         select null            from dual union all
         select '33.9+'         from dual union all
         select '6'             from dual union all
         select '0.00'          from dual
       )
;

STR     MY_NUMBER
------ ----------
92.93-     -92.93
                 
33.9+        33.9
6               6
0.00            0
于 2021-03-05T19:20:53.247 回答
0

据推测,该值是一个字符串。您可以使用:

(case when col like '%-'
      then - to_number(replace(col, '-', ''))
      else to_number(col)
 end)

请注意,这适用于可能出现在最后一个位置的任何字符,包括 em-dashes、en-dashes 和来自其他字符集的字符。

于 2021-03-05T13:08:04.933 回答