我正在使用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表达式吗?否则是否有任何方法可以在查询本身中添加前导零?
您可以通过两种方式做到这一点。
方法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:
TO_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