有什么方法可以将下面的值 72.86- 转换为数字 -72.86?
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 回答