Con la función TO_NUMBER vamos a convertir texto en números dentro de Oracle.
Es útil cuando recibimos números como texto y necesitamos hacer cálculos, ordenar correctamente o guardar el dato en una columna numérica.
Sintaxis
TO_NUMBER(expr [, formato [, parametros_nls]])
expres el texto o expresión que queremos convertir.formatoindica cómo debe interpretar Oracle el número.parametros_nlspermite indicar separadores decimal/miles o moneda cuando no queremos depender de la configuración de sesión.
Para conversiones simples, Oracle puede interpretar directamente una cadena numérica:
SELECT TO_NUMBER('1234') AS numero
FROM dual;
Resultado:
NUMERO ------ 1234
Si el texto usa separadores concretos, conviene indicarlos de forma explícita:
SELECT TO_NUMBER(
'1.234,56',
'9G999D99',
'NLS_NUMERIC_CHARACTERS='',.'''
) AS numero
FROM dual;
Resultado:
NUMERO ------- 1234.56
También se puede convertir un importe con símbolo de moneda si el formato lo contempla:
SELECT TO_NUMBER(
'EUR 250,75',
'L999D99',
'NLS_CURRENCY=''EUR '' NLS_NUMERIC_CHARACTERS='',.'''
) AS importe
FROM dual;
Resultado:
IMPORTE ------- 250.75
Notas
- Si el texto no encaja con el formato indicado, Oracle devolverá error de conversión.
- Para datos con coma decimal o punto de miles, es mejor definir el formato y los parámetros NLS en la consulta.
- Si solo se quiere mostrar un número como texto, la función adecuada suele ser
TO_CHAR, noTO_NUMBER.
