sql >> Databáze >  >> RDS >> Oracle

Nastavení NLS_NUMERIC_CHARACTERS pro desetinné místo

Aktuální nastavení relace můžete zobrazit dotazem nls_session_parameters :

select value
from nls_session_parameters
where parameter = 'NLS_NUMERIC_CHARACTERS';

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

To se může lišit od výchozího nastavení databáze, které můžete vidět v nls_database_parameters .

V této relaci chyby vašeho dotazu:

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

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

Svou relaci jsem mohl změnit buď přímo pomocí alter session nebo zajištěním konfigurace mého klienta způsobem, který vede k nastavení, které řetězec potřebuje (může být například zděděno z operačního systému nebo jazyka Java):

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

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

V SQL Developer můžete nastavit preferovanou hodnotu v Tool->Preferences->Database->NLS.

Ale mohu také přepsat toto nastavení relace jako součást dotazu s volitelným třetím nlsparam parametr na to_number(); ačkoli to dělá volitelný druhý fmt parametr nezbytný také, takže budete muset být schopni vybrat vhodný formát:

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 

Ve výchozím nastavení se výsledek stále zobrazuje s nastavením mé relace, takže oddělovač desetinných míst je stále tečka.



  1. Potenciální vylepšení ASPState

  2. Funkce změny velikosti písmen VBA

  3. Porozumění Javě Oracle na Macu

  4. Jak najít hranice skupin souvislých pořadových čísel?