0

我有一个光标,它从包含浮点数的 NUMBER 类型的列中选择日期。像 4,3433 这样的数字会正确返回,而小于 1 的数字会删除前导零。

例如,数字 0,4513 返回为 ,4513。

当我在数据库的游标中执行 select 时,数字格式正确,前导零。

这就是我循环游标返回的记录的方式:

FOR c_data IN cursor_name(p_date) LOOP

...

END LOOP;

任何想法为什么它会这样工作?

先感谢您。

4

2 回答 2

4

您混淆了数字格式和数字值。

两个字符串0.123.123,当作为数字读取时,在数学上是相等的。它们代表相同的数字。在 Oracle 中,真正的数字表示永远不会直接显示,我们总是将数字转换为字符以显示它,无论是隐式还是使用函数显式

您假设 0 和 1 之间的数字应以前导 0 表示,但默认情况下并非如此,这取决于您要求如何显示此数字。如果您不希望出现意外结果,则在显示数字/日期时必须明确,例如:

to_char(your_number, '9990.99');
于 2013-09-19T16:30:28.840 回答
1

这是 Oracle 提供的默认数字格式。如果你想指定一些自定义的东西,你应该使用 TO_CHAR 函数(在 SQL 查询或循环内的 PL/SQL 代码中)。

下面是它的工作原理:

SQL>
SQL> WITH aa AS (
  2  select 1.3232 NUM from dual UNION ALL
  3  select 1.3232 NUM from dual UNION ALL
  4  select 332.323 NUM from dual UNION ALL
  5  select 0.3232 NUM from dual
  6  )
  7  select  NUM, to_char(NUM, 'FM999990D9999999') FORMATTED from aa
  8  /

       NUM FORMATTED
---------- ---------------
    1.3232 1.3232
    1.3232 1.3232
   332.323 332.323
     .3232 0.3232

SQL>

在此示例中,“FM” - 抑制额外的空白,“0”表示包含前导/尾随零的数字,“9”表示抑制前导/尾随零的数字。

你可以在这里找到很多例子:http: //docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm#i34570

于 2013-09-19T16:42:10.907 回答