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

时间:2015-07-29 07:08:12

标签: 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())

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

3 个答案:

答案 0 :(得分:20)

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

方法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>

WITH子句只用于构建示例的示例数据,在您的实际查询中只需执行:

lpad(removal_count, 5, '0')

请注意,数字不能包含前导零。上述查询的输出为字符串,而非数字

方法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>

更新:为避免用于减号的额外领先空间,请使用TO_CHAR格式的 FM

没有FM:

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

NUM_PAD    TOT_LEN
------- ----------
 00001           6 

使用FM:

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

NUM_PAD    TOT_LEN
------- ----------
00001            5

答案 1 :(得分:5)

使用removal_count = 540 LPAD(TO_CHAR(removal_count), 5, '0'); Result: '00540' pl / sql函数http://www.techonthenet.com/oracle/functions/lpad.php

{{1}}

答案 2 :(得分:0)

在sqlplus中,您可以使用col格式:

SQL>选择540 aa,540 bb from dual;

    AA         BB
   540        540

SQL> col bb格式00000

SQL> /

    AA     BB
   540  00540

SQL>