sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo convertir de manera eficiente texto a número en Oracle PL/SQL con NLS_NUMERIC_CHARACTERS no predeterminados?

Lo siguiente debería funcionar:

SELECT to_number(:x, 
                 translate(:x, '012345678-+', '999999999SS'), 
                 'nls_numeric_characters=''.,''') 
  FROM dual;

Construirá el segundo argumento correcto 999.999999 con el eficiente translate así que no tienes que saber cuántos dígitos hay de antemano. Funcionará con todos los formatos de números de Oracle admitidos (hasta 62 dígitos significativos aparentemente en 10.2.0.3).

Curiosamente, si tiene una cadena realmente grande, el simple to_number(:x) funcionará mientras que este método fallará.

Editar:soporte para números negativos gracias a sOliver.