日期:2014-05-17  浏览次数:21003 次

请教ORACLE中如何将数字转化为字符串
本人为oracle菜鸟,
select 500 / 1000 from dual
显示:0.5
select to_char(500 / 1000) from dual
显示:.5

我想请教,ORACLE中如何将数字转化为字符串能够正确显示出0.5

例:select to_char(500 / 1000,'0.0') from dual
这样结果是为 0.5
但是当select to_char(5000 / 1000,'0.0') from dual
这是的结果是 5.0 (这样是有问题的,我需要的是5不要后面的.0)

但是当select to_char(5000 / 1000,'0.00') from dual
这是的结果是 5.00 (这样是有问题的,我需要的是5不要后面的.00)

但是当select to_char(500 / 1000,'0.00') from dual
这是的结果是 0.50(这样是有问题的,我需要先显示的是0.5而不是0.50)
请教该如何实现呢?

------解决方案--------------------
我试了一下没想到直接达成的办法
不过其实冲突就是在不使用fmt参数,并且结果小于的时候没显示小数点前的0
这样不如在小于的时候直接加个0在前面好了 ^_^

比如我想到的最笨的办法:
SQL> select decode(sign(500/1000-1),-1,'0'||to_char(500/1000),to_char(500/1000)) from dual;
 
DECODE(SIGN(500/1000-1),-1,'0'
------------------------------
0.5
 
SQL> select decode(sign(5000/1000-1),-1,'0'||to_char(5000/1000),to_char(5000/1000)) from dual;
 
DECODE(SIGN(5000/1000-1),-1,'0
------------------------------
5
------解决方案--------------------
呵呵,以上办法没考虑到结果为负的情况

请无视,不好意思
------解决方案--------------------
select to_char(decode(substr(to_char(round(5000/1000,1)),1,1),'.','0'||round(5000/1000,1),round(5000/1000,1))) from dual

select to_char(decode(substr(to_char(round(500/1000,1)),1,1),'.','0'||round(500/1000,1),round(500/1000,1))) from dual
------解决方案--------------------
SQL code
select rtrim(to_char(5,'fm0.99'),'.') from dual;
select rtrim(to_char(.5,'fm0.99'),'.') from dual;
select rtrim(to_char(.05,'fm0.99'),'.') from dual;