sql >> Database >  >> RDS >> Oracle

NLS_NUMERIC_CHARACTERS instelling voor decimaal

U kunt uw huidige sessie-instellingen zien door nls_session_parameters . op te vragen :

select value
from nls_session_parameters
where parameter = 'NLS_NUMERIC_CHARACTERS';

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

Dat kan verschillen van de standaardinstellingen van de database, die u kunt zien in nls_database_parameters .

In deze sessie uw zoekopdracht fouten:

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

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

Ik zou mijn sessie kunnen wijzigen, ofwel direct met alter session of door ervoor te zorgen dat mijn client is geconfigureerd op een manier die leidt tot de instelling die de string nodig heeft (deze kan bijvoorbeeld worden overgenomen van een besturingssysteem of Java-locale):

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

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

In SQL Developer kunt u uw voorkeurswaarde instellen in Tool->Voorkeuren->Database->NLS.

Maar ik kan die sessie-instelling ook overschrijven als onderdeel van de query, met de optionele derde nlsparam parameter naar to_number(); hoewel dat de optionele tweede fmt . maakt parameter ook nodig, dus je moet een geschikt formaat kunnen kiezen:

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 

Standaard wordt het resultaat nog steeds weergegeven met mijn sessie-instellingen, dus het decimaalteken is nog steeds een punt.



  1. elimineer dubbele matrixwaarden in postgre

  2. JDBC MySql-verbindingspoolingpraktijken om een ​​uitgeputte verbindingspool te voorkomen

  3. Krijg de som van de MySQL-kolom in PHP

  4. Controleer niet-verzonden e-mail in SQL Server (T-SQL)