Pregunta

SQL> select TO_NUMBER(123.56,'999.9') from dual;
select TO_NUMBER(123.56,'999.9') from dual
                 *
ERROR at line 1:
ORA-01722: invalid number


SQL> select TO_CHAR(123.56,'999.9') from dual;

TO_CHA
------
 123.6

SQL>

Estoy teniendo dificultades en la comprensión de los matices de Oracle SQL. Por ejemplo, echar un vistazo a las dos consultas anteriores.

¿Por qué fracasa la primera consulta, pero segundo éxito?

¿Fue útil?

Solución

De acuerdo con la documentación, el primer valor de unas necesidades TO_NUMBER sean

un valor BINARY_DOUBLE o un valor de CHAR, VARCHAR2, NCHAR, o NVARCHAR2 tipo de datos que contiene un número en el formato especificado por el modelo de formato opcional

Por lo tanto Oracle está implícita convirtiendo en un valor de 123,56 carácter. El problema viene después de que el formato de la to_number no coincide con el valor que se da. Esto se puede ver porque se obtiene el mismo error para las dos variantes siguientes:

select to_number(to_char(123.56),'999.9') from dual;

select to_number('123.56','999.9') from dual;

Sin embargo, no lo hace para esto:

select to_number(123.56,'999.99') from dual;

Cuando la conversión de caracteres a números de la especificación de formato debe coincidir exactamente, pero cuando la conversión de números para el número de caracteres se puede extraer selectivamente usando el especificador de formato.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top