我正在使用Oracle SQL。我的值为String
类型的列,实际上应该是一种货币。
字符串值采用以下格式:
103,2 %
我需要将其转换为:
103.2
Aldo我需要将值类型转换为Float
。
是否有可以帮助我的良好对话功能?我需要使用Replace()
函数吗?
答案 0 :(得分:2)
这样的事情怎么样?
select cast(translate(col, ', %', '.') as float)
答案 1 :(得分:1)
您可以使用replace
删除固定的%
部分,该部分已将103,2 %
更改为103,2
;并将结果传递给to_number()
。由于您似乎在数据库中的值和句点中有逗号十进制分区,因此您可以指定NLS_NUMERIC_CHARACTERS:
select to_number(replace('103,2 %', ' %'),
'999999D99', 'NLS_NUMERIC_CHARACTERS='',.''') as value
from dual;
VALUE
----------
103.2
如果您没有固定的格式 - 例如,可能存在或不存在空格,或者您可以使用不同的货币符号而不是% - 那么您可以使用translate
作为Gordon Linoff显示,或使用正则表达式删除任何非数字字符:
select to_number(regexp_replace('103,2 %', '[^[:digit:],]'),
'999999D99', 'NLS_NUMERIC_CHARACTERS='',.''') as value
from dual;
答案 2 :(得分:0)
您可以使用CAST(string AS DECIMAL)
或CAST(string AS SIGNED INTEGER)