代码之家  ›  专栏  ›  技术社区  ›  BeHunter

ORACLE将数字转换为字符串

  •  8
  • BeHunter  · 技术社区  · 11 年前

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

    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

    我需要 0 逗号之前,但不能在逗号之后。

    2 回复  |  直到 11 年前
        1
  •  13
  •   Alex Poole    11 年前

    使用 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
    
        2
  •  0
  •   araknoid    11 年前

    这应该可以解决您的问题:

    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 用于测试。

    推荐文章