sql >> Database >  >> RDS >> Oracle

Hoe kan ik efficiënt tekst naar getal converteren in Oracle PL/SQL met niet-standaard NLS_NUMERIC_CHARACTERS?

Het volgende zou moeten werken:

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

Het zal het juiste tweede argument bouwen 999.999999 met de efficiënte translate u hoeft dus niet vooraf te weten hoeveel cijfers er zijn. Het werkt met alle ondersteunde Oracle-nummerformaten (tot 62 significante cijfers blijkbaar in 10.2.0.3).

Interessant is dat als je een hele grote string hebt, de simpele to_number(:x) zal werken, terwijl deze methode zal mislukken.

Bewerken:ondersteuning voor negatieve getallen dankzij sOliver.



  1. Wanneer STRAIGHT_JOIN gebruiken met MySQL?

  2. Hoe kan ik de taak scripts genereren in SQL Server Management Studio 2008 automatiseren?

  3. Weken aftrekken van een datum in PostgreSQL

  4. Is het in Apache Spark 2.0.0 mogelijk om een ​​query op te halen uit een externe database (in plaats van de hele tabel te pakken)?