ORACLE将数字转换为字符串

ORACLE将数字转换为字符串,oracle,to-char,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

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

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
但是如何使我的输出像:

  • 0,35
  • 0,4
  • 5,57
  • 五十
  • 50,57

  • 我需要逗号前的
    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
    );
    
    对于测试,也可以这样看。

    使用来接近,因为小数点分隔符后不会出现尾随的零;但是您仍然会得到分隔符本身,例如
    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
    

    您可以使用
    90D99
    ,但这将使第二个值成为
    0,4
    ,而不是
    0,40
    。我不确定你们能不能有一个型号同时允许
    0,40
    50
    。90D99给了我同样的0.40。0.40是我的错…我需要0.4 ofc。这是我的错。我需要0.4。所以我们可以使用trim…但是对于mee来说它太复杂了…rtrim(rtrim)(to_char(a,'90D99'),'0'),')rtrim(to_char(a,'FM90D99'),to_char(0,'D'))非常完美,谢谢!