Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie kann Text in Oracle PL/SQL mit nicht standardmäßigen NLS_NUMERIC_CHARACTERS effizient in Zahlen konvertiert werden?

Folgendes sollte funktionieren:

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

Es wird das korrekte zweite Argument 999.999999 erstellen mit dem effizienten translate Sie müssen also nicht vorher wissen, wie viele Ziffern es sind. Es funktioniert mit allen unterstützten Oracle-Zahlenformaten (bis zu 62 signifikante Ziffern anscheinend in 10.2.0.3).

Interessanterweise, wenn Sie einen wirklich großen String haben, das einfache to_number(:x) funktioniert, während diese Methode fehlschlagen wird.

Bearbeiten:Unterstützung für negative Zahlen dank sOliver.