我有一个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/