¿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
¿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
La máscara de formato que está utilizando es de ancho fijo y permite un signo menos
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)
Perfecto, gracias! –
solo para aclarar: 'to_char (-12, 'FM00')' daría como resultado '-12' y no (como se puede temer)' 12' o '##' –
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]
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).
Pregunta similar http://stackoverflow.com/questions/156329/unwanted-leading-blank-space-on-oracle-number-format tiene respuestas más detalladas. – Vadzim
Las decisiones de diseño de Oracle nunca dejan de sorprenderme ... – MarioDS