2008-10-27 20 views
50

¿Por qué la función to_char() de Oracle agrega espacios?¿Por qué la función to_char() de Oracle agrega espacios?

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

3, 3, 4

+0

Pregunta similar http://stackoverflow.com/questions/156329/unwanted-leading-blank-space-on-oracle-number-format tiene respuestas más detalladas. – Vadzim

+0

Las decisiones de diseño de Oracle nunca dejan de sorprenderme ... – MarioDS

Respuesta

22

La máscara de formato que está utilizando es de ancho fijo y permite un signo menos

106

el espacio inicial extra es para el signo menos potencial. Para eliminar el espacio puede utilizar FM en el formato:

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

TO_C 
---- 
012 

Por cierto, cabe destacar que to_char toma un argumento NÚMERO; to_char ('012') se convierte implícitamente a TO_CHAR (to_number ('012')) = to_char (12)

+2

Perfecto, gracias! –

+3

solo para aclarar: 'to_char (-12, 'FM00')' daría como resultado '-12' y no (como se puede temer)' 12' o '##' –

27

Para que las respuestas dadas más clara:

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


[ 012]      [-012]      [012] 
1

Tenga en cuenta cuando se utiliza el 'fm 'sintaxis no incluirá ningún valor después del lugar decimal a menos que se especifique usando ceros. Por ejemplo:

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

devuelve: '12, 345.00'

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

devuelve: '12, 345 '.

Como puede ver, esto sería un problema si espera dos ceros después de los decimales (por ejemplo, en los informes de tarifas).

Cuestiones relacionadas