ORACLE将数字转换为字符串

时间:2013-04-08 09:27:06

标签: oracle to-char

在转换数字时需要一些帮助:

select to_char(a, '99D99')
       , to_char(a, '90D99')
from
(
select 50 a from dual
union
select 50.57 from dual
union
select 5.57 from dual
union
select 0.35 from dual
union
select 0.4 from dual

将导致:

1      ,35    0,35
2      ,40    0,40
3     5,57    5,57
4    50,00   50,00
5    50,57   50,57

但是如何使我的输出像:

  1. 0,35
  2. 0,4
  3. 5,57
  4. 50
  5. 50,57
  6. 我在逗号之前需要0,但不能在之后。

2 个答案:

答案 0 :(得分:13)

使用FM format model modifier来关闭,因为在小数点分隔符后不会得到尾随零;但你仍然会得到分隔符,例如50.。您可以使用rtrim来摆脱它:

select to_char(a, '99D90'),
    to_char(a, '90D90'),
    to_char(a, 'FM90D99'),
    rtrim(to_char(a, 'FM90D99'), to_char(0, 'D'))
from (
    select 50 a from dual
    union all select 50.57 from dual
    union all select 5.57 from dual
    union all select 0.35 from dual
    union all select 0.4 from dual
)
order by a;

TO_CHA TO_CHA TO_CHA RTRIM(
------ ------ ------ ------
   .35   0.35 0.35   0.35
   .40   0.40 0.4    0.4
  5.57   5.57 5.57   5.57
 50.00  50.00 50.    50
 50.57  50.57 50.57  50.57

请注意,我正在使用to_char(0, 'D')生成要修剪的字符,以匹配小数点分隔符 - 因此它会查找相同的字符,.,作为第一个to_char补充道。

轻微的缺点是你失去了对齐。如果在其他地方使用它可能无关紧要,但它确实可以将它包装在lpad中,这会使它看起来有点复杂:

...
lpad(rtrim(to_char(a, 'FM90D99'), to_char(0, 'D')), 6)
...

TO_CHA TO_CHA TO_CHA RTRIM( LPAD(RTRIM(TO_CHAR(A,'FM
------ ------ ------ ------ ------------------------
   .35   0.35 0.35   0.35     0.35
   .40   0.40 0.4    0.4       0.4
  5.57   5.57 5.57   5.57     5.57
 50.00  50.00 50.    50         50
 50.57  50.57 50.57  50.57   50.57

答案 1 :(得分:0)

这可以解决您的问题:

select replace(to_char(a, '90D90'),'.00','')
from
(
select 50 a from dual
union
select 50.57 from dual
union
select 5.57 from dual
union
select 0.35 from dual
union
select 0.4 from dual
);

还可以查看此SQL Fiddle进行测试。