Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment convertir efficacement du texte en nombre dans Oracle PL/SQL avec NLS_NUMERIC_CHARACTERS non par défaut ?

Ce qui suit devrait fonctionner :

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

Il construira le deuxième argument correct 999.999999 avec l'efficace translate vous n'avez donc pas besoin de savoir combien de chiffres il y a à l'avance. Il fonctionnera avec tous les formats de nombre Oracle pris en charge (jusqu'à 62 chiffres significatifs apparemment dans 10.2.0.3).

Fait intéressant, si vous avez une très grande chaîne, le simple to_number(:x) fonctionnera alors que cette méthode échouera.

Edit :support des nombres négatifs grâce à sOliver.