Oracle
 sql >> Database >  >> RDS >> Oracle

Come convertire in modo efficiente il testo in numero in Oracle PL/SQL con NLS_NUMERIC_CHARACTERS non predefinito?

Dovrebbe funzionare quanto segue:

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

Creerà il secondo argomento corretto 999.999999 con l'efficiente translate quindi non devi sapere quante cifre ci sono in anticipo. Funzionerà con tutti i formati numerici Oracle supportati (fino a 62 cifre significative apparentemente in 10.2.0.3).

È interessante notare che se hai una stringa davvero grande, il semplice to_number(:x) funzionerà mentre questo metodo fallirà.

Modifica:supporto per numeri negativi grazie a sOliver.