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

时间:2018-12-17 18:38:53

标签: 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时,我得到一个纯数字(例如25,2340,239044),但是我需要在上面指定的十进制数字中使用。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

也许:

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

答案 1 :(得分:0)

假定您的第一个值仅具有一个前导零,则可以将原始字符串转换为数字,除以100,然后使用与所需输出匹配的模型将其格式化为字符串,例如:< / p>

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

如果您要按照问题中所示的对齐方式,将所有值都左对齐而不是小数点对齐,则可以添加the FM format modifier,以消除填充空格:

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