一尘不染

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

sql

我正在使用COUNT()函数在查询中检索名为removing_count的列。在结果集中,remove_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())

我们可以将remove_count转换为字符串或整数(从十进制开始),以便可以使用给定的java表达式吗?否则是否有任何方法可以在查询本身中添加前导零?


阅读 218

收藏
2021-03-17

共1个答案

一尘不染

您可以通过两种方式做到这一点。

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

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

方法二

使用 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>

更新 :为避免用于减号的多余前导空格,请使用以下格式的 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

使用FM:

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

NUM_PAD    TOT_LEN
------- ----------
00001            5
2021-03-17