如何在Oracle SQL查询中的数字中添加前导零?

Mad*_*dan 14 sql oracle

我正在使用COUNT()函数在我的查询中检索名为removed_count的列.在结果集中,removed_count的数据类型为BIGDECIMAL.我想将数字转换成五位数.因此,如果值小于五位,则应使用前导零表示.

例如1)如果移除计数为540,则显示00540
2)如果移除计数为60,则显示00060

如果删除计数是整数/字符串值,那么我可以使用java表达式添加前导零:

--if removal_count is integer--
String.format("%05d",removal_count)

--if removal_count is string--
("00000"+removal_count).subString(removal_count.length())
Run Code Online (Sandbox Code Playgroud)

我们可以将removal_count转换为字符串或整数(从大十进制),以便我可以使用给定的java表达式?或者有没有办法在查询中添加前导零?

Lal*_*r B 23

你可以用两种方式做到这一点.

方法1

使用LPAD.

例如,

SQL> WITH DATA(num) AS(
  2  SELECT 540 FROM dual UNION ALL
  3  SELECT 60 FROM dual UNION ALL
  4  SELECT 2 FROM dual
  5  )
  6  SELECT num, lpad(num, 5, '0') num_pad FROM DATA;

       NUM NUM_P
---------- -----
       540 00540
        60 00060
         2 00002

SQL>
Run Code Online (Sandbox Code Playgroud)

WITH子句只是为demo构建示例数据,在您的实际查询中只做:

lpad(removal_count, 5, '0')
Run Code Online (Sandbox Code Playgroud)

请记住,一个数字不能有前导零.上述查询的输出是字符串而不是数字.

方法2

使用TO_CHAR和格式模型:

SQL> WITH DATA(num) AS(
  2  SELECT 540 FROM dual UNION ALL
  3  SELECT 60 FROM dual UNION ALL
  4  SELECT 2 FROM dual
  5  )
  6  SELECT num, to_char(num, '00000') num_pad FROM DATA;

       NUM NUM_PA
---------- ------
       540  00540
        60  00060
         2  00002

SQL>
Run Code Online (Sandbox Code Playgroud)

更新:为避免用于减号的额外前导空格,请使用以下格式的FMTO_CHAR:

没有FM:

SELECT TO_CHAR(1, '00000') num_pad,
  LENGTH(TO_CHAR(1, '00000')) tot_len
FROM dual;

NUM_PAD    TOT_LEN
------- ----------
 00001           6 
Run Code Online (Sandbox Code Playgroud)

使用FM:

SELECT TO_CHAR(1, 'FM00000') num_pad,
  LENGTH(TO_CHAR(1, 'FM00000')) tot_len
FROM dual;

NUM_PAD    TOT_LEN
------- ----------
00001            5
Run Code Online (Sandbox Code Playgroud)


ada*_*sko 5

使用LPADpl/sql函数http://www.techonthenet.com/oracle/functions/lpad.php.

removal_count = 540 
LPAD(TO_CHAR(removal_count), 5, '0');
Result: '00540'
Run Code Online (Sandbox Code Playgroud)