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

Longueur dynamique sur le format numérique dans to_number Oracle SQL

Le seul moyen est de définir la valeur appropriée pour nls_numeric_characters paramétrez l'ensemble de la session et utilisez to_number() fonction sans spécifier de masque de format.

Voici un exemple simple. Le caractère séparateur décimal est une virgule "," et les littéraux numériques contiennent le point "." comme caractère séparateur décimal :

SQL> show parameter nls_numeric_characters;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------
nls_numeric_characters               string      ,.

SQL> with t1(col) as(
  2    select '12345.567'  from dual union all
  3    select '12.45'      from dual
  4  )
  5  select to_number(col) as res
  6    from t1;
select to_number(col)
       *
ERROR at line 5:
ORA-01722: invalid number 

SQL> alter session set nls_numeric_characters='.,';

Session altered.

SQL> with t1(col) as(
  2    select '12345.567'  from dual union all
  3    select '12.45'      from dual
  4  )
  5  select to_number(col) as res
  6    from t1;

res                                                                 
--------------    
     12345.567       
         12.45