【问题标题】:RPAD TO_CHAR gives unexpected output - OracleRPAD TO_CHAR 给出了意外的输出 - Oracle
【发布时间】:2013-07-15 19:01:30
【问题描述】:

我使用数字数据类型的 rpad、nvl 和 to_char 组合得到了意外的输出。

以下是我在 Oracle(Oracle 数据库 11g 版本 11.2.0.3.0)中执行的查询:

从双重选择 RPAD(NVL(TO_CHAR(122.85,'000.000'),' '),6)

输出: 122.8(注:准确输出:122.8)

我怀疑,为什么最后一个字符 5) 被截断了?长度还是六位,包括小数点。

请帮助理解原因。

问候, 玛尼

【问题讨论】:

    标签: sql oracle numbers padding to-char


    【解决方案1】:

    它不是截断,它就在那里。
    但它是一个空间,你看不到它;)

    SELECT RPAD(NVL(TO_CHAR(122.85,'000.000'),' '),6) x,
           length( RPAD(NVL(TO_CHAR(122.85,'000.000'),' '),6)) l,
           dump( RPAD(NVL(TO_CHAR(122.85,'000.000'),' '),6) ) dmp
    FROM dual;
    
    X               L DMP 
    ------ ---------- --------------------------------
     122.8          6 Typ=1 Len=6: 32,49,50,50,46,56 
    

    http://www.techonthenet.com/oracle/functions/rpad.php

    RPAD(字符串,填充长度 [,填充字符串])

    pad_string 是可选的,如果你不指定它,oracle 假设一个空格。

    【讨论】:

      【解决方案2】:

      不知何故,这个 TO_CHAR 在您的号码左侧添加了一个空格。我建议您使用以下内容:

      SELECT RPAD(LTRIM(NVL(TO_CHAR(122.85,'000.000'),'')), 6)
      FROM dual
      

      【讨论】:

        【解决方案3】:

        TO_CHAR(122.85,'000.000') 返回 > 122.850FM 修饰符:TO_CHAR(122.85,'FM000.000')

        SELECT RPAD(NVL(TO_CHAR(122.85,'FM000.000'),' '),6) FROM dual
        

        【讨论】:

        • 嗨朋友们,谢谢你们的cmets。其实我想知道原因,为什么它在第一个位置添加一个空格。 >schurik>> 帮助理解了这个空白的原因,它是为标志保留的。再次感谢。
        【解决方案4】:

        代码

        SELECT NVL(TO_CHAR(122.85,'000.000'),' ') from dual;
        

        返回“122.850”

        注意数字前的空格。

        【讨论】:

          猜你喜欢
          • 2016-03-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-05
          • 1970-01-01
          • 1970-01-01
          • 2012-11-07
          相关资源
          最近更新 更多