66

Why is Oracle's to_char() function adding spaces?

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

3, 3, 4

1

4 Answers 4

133

The extra leading space is for the potential minus sign. To remove the space you can use FM in the format:

SQL> select to_char(12,'FM000') from dual;

TO_C
----
012

By the way, note that to_char takes a NUMBER argument; to_char('012') is implicitly converted to to_char(to_number('012')) = to_char(12)

Sign up to request clarification or add additional context in comments.

1 Comment

just for clarification: to_char(-12,'FM00') would result in -12 and not (as one may fear) 12 or ##
35

To make the answers given more clear:

select '['||to_char(12, '000')||']', 
       '['||to_char(-12, '000')||']', 
       '['||to_char(12,'FM000')||']' 
from dual


[ 012]                      [-012]                       [012]  

Comments

30

The format mask that you are using is fixed width and allows for a minus sign

Comments

3

Be aware when using the 'fm' syntax it will not include any values after the decimal place unless specified using zeros. For example:

SELECT TO_CHAR(12345, 'fm99,999.00') FROM dual                               

returns: '12,345.00'

SELECT TO_CHAR(12345, 'fm99,999.99') FROM dual                            

returns: '12,345.'

As you can see this would be an issue if you are expecting two zeros after the decimals place (maybe in fee reports for example).

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.