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

Ram*_*ada 5 oracle numbers zero leading-zero

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

示例:

如果number为0则为00000如果number为1则为00001如果number为12则应为00012

记住:这里00000,0000和00012是数字数据类型

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

UPDATE pitb.toestel b
   SET b.artnr = LPAD (b.artnr, 5, 0)
 WHERE b.idinventaris = 403743;
Run Code Online (Sandbox Code Playgroud)

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

UPDATE pitb.toestel b
   SET b.artnr = TO_NUMBER (TO_CHAR (artnr, '00009'), '00009')
 WHERE b.idinventaris = 403743;
Run Code Online (Sandbox Code Playgroud)

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

任何人,你能不能给我一些能解决这个问题的方法.

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

Lal*_*r B 10

如果number为0则为00000如果number为1则为00001如果number为12则应为00012

记住:这里00000,0000和00012是数字数据类型

首先,Numbers没有前导零.因此,当您存储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
Run Code Online (Sandbox Code Playgroud)

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


小智 5

select to_char(x,'00000') from dual;
Run Code Online (Sandbox Code Playgroud)