通过在oracle中添加小数来更改数字格式

时间:2015-01-22 11:49:53

标签: sql oracle

我的号码为000005500,我希望它使用Oracle select查询格式为0000055.00或55.00。

我使用了这个查询:

select to_char(to_number(000005500),'99.99') from dual

但显示#####

如何以我需要的格式显示它?

3 个答案:

答案 0 :(得分:3)

正如所写,to_number()调用只是对字符串进行隐式转换,然后显式转换回数字,这似乎毫无意义,但我认为你实际上正在处理来自a的值varchar2列。在这种情况下,您会看到:

select to_char(to_number('000005500'),'99.99') from dual

TO_CHA
------
######

您正在查看哈希,因为您无法将您的四位数字5500变为99.99格式 - 您在小数点前有四位数字,格式掩码只允许两位数。< / p>

您似乎缺少的位除以100得到小数:

select to_char(to_number('000005500') / 100,'99.99') from dual;

TO_CHA
------
 55.00

另一种方法,如果你想把它保持为与oroginal值具有相同数量的前导零的字符串,则将其保留为字符串,用substr()将其删除,然后将这些部分连接起来一起。使用CTE作为演示:

with t as (select '000005500' as val from dual)
select val, substr(val, 1, length(val) - 2)
  || '.' || substr(val, length(val) - 1, 2) as adj_val
from t;

 VAL       ADJ_VAL
--------- ---------------------------------------------
000005500 0000055.00

答案 1 :(得分:1)

首先,000005500不是数字。数字不以零开头。你正在处理一个字符串。

  

我希望它的格式为0000055.00

您只能期望它是一个字符串作为输出,而不是数字。

无论如何,要将输出设为55.00为NUMBER,您可以执行以下操作 -

SQL> WITH DATA AS(
  2  SELECT '000005500' num FROM DUAL
  3  )
  4  SELECT to_char(to_number(replace(num,'0','')),'99D99') FROM DATA
  5  /

TO_CHA
------
 55.00

SQL>

或者,

SQL> WITH DATA AS(
  2  SELECT '000005500' num FROM DUAL
  3  )
  4  SELECT to_char(to_number(rtrim(ltrim(num,'0'),'0')),'99D99') FROM DATA
  5  /

TO_CHA
------
 55.00

SQL>

修改

Alex的方法也不错,它使用简单的数学方法将其转换为DECIMAL。第一部分我更喜欢他的方式。

答案 2 :(得分:0)

围绕最终格式化的另外两种选择:

select to_char(to_number('000005500')/100,'0999999D90') leading_zeros,
       to_char(to_number('000005500')/100,'fm9999999D90') no_leading_zeros
from dual;