我有一个oracle列(artnr)包含长度为1的数字,类型为number(9)。我要更新以下号码...

例子 :

如果数字为0,则应为00000
如果数字为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解决方案更可取

最佳答案



首先,数字没有前导零的。因此,当您存储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

关于oracle - 如何在多个oracle中显示前导零,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25968792/

10-12 03:51