我的号码为000005500,我希望它使用Oracle select查询格式为0000055.00或55.00。
我使用了这个查询:
select to_char(to_number(000005500),'99.99') from dual
但显示#####
如何以我需要的格式显示它?
答案 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;