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

标签 sql oracle

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

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

最佳答案

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

方法一

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

更新 : 为避免用于减号的额外前导空格,请使用 调频 TO_CHAR格式:

无调频:
SELECT TO_CHAR(1, '00000') num_pad,
  LENGTH(TO_CHAR(1, '00000')) tot_len
FROM dual;

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

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

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

关于sql - 如何在 Oracle SQL 查询中的数字中添加前导零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31693521/

相关文章:

java - 修复无效标识符的错误

sql - 插入查询

java - 如何配置liquibase maven插件为oracle生成sql输出

python - 如何防止django,将日期转换为utc格式

java - JTable 显示某一日期下的事件列表

mysql - 如何在 SELECT 函数中对行内的某个值进行 ORDER BY?

mysql - 基于 "group by"组进行合并

mysql - 如何在同一个查询中使用部分sql查询?

sql - SSRS 2008 - 如何隐藏组可见性切换单元格中的加号图标

sql - Oracle SQL 19c中如何获取日期对应的季度