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

NLS_NUMERIC_CHARACTERS impostazione per decimale

Puoi vedere le impostazioni della tua sessione corrente interrogando nls_session_parameters :

select value
from nls_session_parameters
where parameter = 'NLS_NUMERIC_CHARACTERS';

VALUE                                  
----------------------------------------
.,                                       

Potrebbe differire dalle impostazioni predefinite del database, che puoi vedere in nls_database_parameters .

In questa sessione i tuoi errori di query:

select to_number('100,12') from dual;

Error report -
SQL Error: ORA-01722: invalid number
01722. 00000 -  "invalid number"

Potrei modificare la mia sessione, sia direttamente con alter session o assicurandomi che il mio client sia configurato in un modo che porti all'impostazione necessaria alla stringa (potrebbe essere ereditata da un sistema operativo o da una locale Java, ad esempio):

alter session set NLS_NUMERIC_CHARACTERS = ',.';
select to_number('100,12') from dual;

TO_NUMBER('100,12')
-------------------
             100,12 

In SQL Developer puoi impostare il tuo valore preferito in Strumento->Preferenze->Database->NLS.

Ma posso anche sovrascrivere l'impostazione della sessione come parte della query, con il terzo nlsparam opzionale parametro a to_number(); anche se questo rende il secondo fmt opzionale parametro necessario, quindi dovresti essere in grado di scegliere un formato adatto:

alter session set NLS_NUMERIC_CHARACTERS = '.,';
select to_number('100,12', '99999D99', 'NLS_NUMERIC_CHARACTERS='',.''')
from dual;

TO_NUMBER('100,12','99999D99','NLS_NUMERIC_CHARACTERS='',.''')
--------------------------------------------------------------
                                                        100.12 

Per impostazione predefinita, il risultato viene ancora visualizzato con le impostazioni della mia sessione, quindi il separatore decimale è ancora un punto.