为什么Oracle的to_char()
函数会添加空格?
select length('012'),
length(to_char('012')),
length(to_char('12', '000'))
from dual;
3, 3, 4
答案 0 :(得分:114)
额外的领先空间是潜在的减号。要删除空间,您可以使用以下格式的FM:
SQL> select to_char(12,'FM000') from dual;
TO_C
----
012
顺便提一下,请注意to_char采用NUMBER参数; to_char('012')隐式转换为to_char(to_number('012'))= to_char(12)
答案 1 :(得分:30)
为了更清楚地给出答案:
select '['||to_char(12, '000')||']',
'['||to_char(-12, '000')||']',
'['||to_char(12,'FM000')||']'
from dual
[ 012] [-012] [012]
答案 2 :(得分:25)
您使用的格式掩码是固定宽度,允许使用减号
答案 3 :(得分:1)
请注意,在使用'fm'语法时,除非使用零指定,否则它将不包括小数位后的任何值。例如:
SELECT TO_CHAR(12345, 'fm99,999.00') FROM dual
返回: '12,345.00'
SELECT TO_CHAR(12345, 'fm99,999.99') FROM dual
返回: '12,345。'
正如您所看到的,如果您希望小数点后面有两个零(例如,可能在费用报告中),那么这将是一个问题。