为什么Oracle的to_char()函数会添加空格?

时间:2008-10-27 14:57:47

标签: oracle

为什么Oracle的to_char()函数会添加空格?

select length('012'), 
       length(to_char('012')), 
       length(to_char('12', '000')) 
  from dual;

3, 3, 4

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。'

正如您所看到的,如果您希望小数点后面有两个零(例如,可能在费用报告中),那么这将是一个问题。