Oracle游标删除前导零

时间:2013-09-19 16:18:48

标签: oracle plsql cursor

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

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

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

这就是我循环遍历游标返回的recors的方法:

FOR c_data IN cursor_name(p_date) LOOP

...

END LOOP;

为什么它以这种方式运作的任何想法?

提前谢谢。

2 个答案:

答案 0 :(得分:4)

您的数字格式和数字值令人困惑。

当作为数字读取时,两个字符串0.123.123在数学上等于。它们代表相同的数字。在Oracle中,真正的数字表示永远不会直接显示,我们总是将数字转换为字符以隐式显示或explicitly with a function

您假设介于0和1之间的数字应使用前导0表示,但默认情况下不是这样,这取决于您询问此数字的显示方式。如果您不希望出现意外结果,you have to be explicit显示数字/日期时,例如:

to_char(your_number, '9990.99');

答案 1 :(得分: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