especificadores de formato oráculo: to_number vs to_char
-
16-10-2019 - |
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?
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.