Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como converter texto em número com eficiência no Oracle PL/SQL com NLS_NUMERIC_CHARACTERS não padrão?


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

Ele construirá o segundo argumento correto 999.999999 com o eficiente translate então você não precisa saber quantos dígitos existem de antemão. Ele funcionará com todos os formatos de número Oracle suportados (até 62 dígitos significativos aparentemente em 10.2.0.3).

Curiosamente, se você tiver uma string muito grande, o simples to_number(:x) funcionará enquanto este método falhará.

Edit:suporte para números negativos graças ao sOliver.