我有一个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))