如何在一些oracle中显示前导零

时间:2014-09-22 07:33:28

标签: oracle numbers zero leading-zero

我有一个oracle列(artnr)包含长度为1的类型为number(9)。我想更新数字如下......

示例:

如果number为0则应为00000 如果number为1则应为00001 如果数字是12,则它应该是00012

请记住:此处00000,0000和00012是数字数据类型

以下是我尝试但失败的方法..

UPDATE pitb.toestel b
   SET b.artnr = LPAD (b.artnr, 5, 0)
 WHERE b.idinventaris = 403743;

失败,因为Lpad只能应用于字符串

UPDATE pitb.toestel b
   SET b.artnr = TO_NUMBER (TO_CHAR (artnr, '00009'), '00009')
 WHERE b.idinventaris = 403743;

仍然失败,因为to_number不会显示前导零。它只考虑第一个数字

任何人,你能否建议我解决这种情况的事情。

sql比pl / sql解决方案更受欢迎

4 个答案:

答案 0 :(得分:9)

  

如果number为0,那么它应该是00000如果number是1那么它应该是   是00001如果数字是12,它应该是00012

     

请记住:此处00000,0000和00012是数字数据类型

首先,数字没有领先的零。因此,当您存储NUMBER值时,您会让它们表现得像NUMBER。只有当您想要显示它们时,您才能使用LPAD并添加前导零。将数字转换为带有前导零的字符串。

因此,无需更新表格。使用LPAD以您希望的方式显示它们。

 SQL> WITH DATA AS
  2    ( SELECT 1 ID FROM DUAL UNION ALL
  3      SELECT 11 ID FROM DUAL
  4    )
  5  SELECT
  6     LPAD(ID,5, 0) id
  7  FROM DATA
  8  /

ID
-----
00001
00011

要避免隐式数据类型转换,请在应用TO_CHAR之前使用LPAD

答案 1 :(得分:5)

select to_char(x,'00000') from dual;

答案 2 :(得分:0)

如果确实想要存储前面为零的数字,则必须将数据类型更改为varchar2。然后,您可以在更新语句中应用to_char( artnr , 'fm00009')。当然,这可能带来意想不到的后果。寻求此解决方案需要您自担风险。

您可能还会考虑创建一个视图,当您从该视图中进行选择时,该视图会“动态”对数字进行零填充。

答案 3 :(得分:0)

在我的情况下,目标是计算不同货币的值的总和,但问题是由字段VALUE的数据类型创建的,即VARCHAR2(255 BYTE)。我找到了这个解决方案,用于处理前导零的问题:

{{1}}