我正在使用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表达式吗?或者有没有办法在查询中添加前导零?
答案 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>