如何在SQL(Oracle)中将字符串转换为指定格式的十进制数



我有一个varchar类型的列,具有以下值

Values in column     Output should be
000025               00.25
002340               23.40
239044               2390.44
000305               3.05
000100               1.00

当我使用to_number时,我得到了一个普通的数字(比如252340239044(,但我需要上面指定的十进制数。

感谢您的帮助。

假设您的第一个值只有一个前导零,您可以将原始字符串转换为数字,除以100,然后使用与您想要的输出匹配的模型将其格式化为字符串,例如:

to_char(to_number(orig_str)/100, '9990.00') as new_str

演示:

-- CTE for sample data
with your_table(orig_str) as (
select 000025 from dual
union all select 002340 from dual
union all select 239044 from dual
union all select 000305 from dual
union all select 000100 from dual
)
-- query
select orig_str,
to_char(to_number(orig_str)/100, '9990.00') as new_str
from your_table;
ORIG_STR NEW_STR 
---------- --------
25     0.25
2340    23.40
239044  2390.44
305     3.05
100     1.00

如果你想要问题中所示的对齐方式,所有值都左对齐,而不是在小数点对齐,你可以添加FM格式修饰符,它可以抑制填充空格:

select orig_str,
to_char(to_number(orig_str)/100, 'FM9990.00') as new_str
from your_table;
ORIG_STR NEW_STR 
---------- --------
25 0.25    
2340 23.40   
239044 2390.44 
305 3.05    
100 1.00    

也许:

select cast(to_number(val) / 100 as decimal(5, 2))

最新更新