如何在小数点前显示固定位数的数字?

Laz*_*zer 4 oracle oracle-11g-r2

我正在寻找结果0123.56,以下查询应该有效。

SQL> select to_number(123.56,'0999.99') from dual;
select to_number(123.56,'0999.99') from dual
                 *
ERROR at line 1:
ORA-01722: invalid number


SQL>
Run Code Online (Sandbox Code Playgroud)

但事实并非如此。我在这里做错了什么?

Jac*_*las 8

看起来您正在尝试将数字转换为数字 - 请尝试to_char

select to_char(123.56,'0999.99') from dual;

TO_CHAR(123.56,'0999.99') 
------------------------- 
 0123.56  
Run Code Online (Sandbox Code Playgroud)

请注意,相比之下,select to_number('0123.56','0999.99') from dual;会成功,因为格式规范匹配,但不会0123.56根据需要返回文本-'0999.99'在这种情况下是输入格式,而不是输出格式 -123.56将返回数字。

  • 你所追求的结果是`0123.56`,它不是一个数字(它是一个字符串/字符/变量/文本/任何东西)。`to_number` [将文本类型(或 binary_double)转换为 `number`](http://dba.stackexchange.com/questions/4941/oracle-format-specifiers-to-number-vs-to-char/ 4946#4946)。最好在脑海中尝试将数字的概念和可以直观地呈现该数字的各种方式(例如前导零、逗号千位分隔符等)分开 - 视觉表示不是数字,而是文本。 (4认同)
  • @cartbeforehorse 尝试`to_char(123.56,'fm0999.99')`,或者您想在左侧填充空格? (2认同)