Du kan se dine aktuelle sessionsindstillinger ved at forespørge nls_session_parameters
:
select value
from nls_session_parameters
where parameter = 'NLS_NUMERIC_CHARACTERS';
VALUE
----------------------------------------
.,
Det kan afvige fra databasens standardindstillinger, som du kan se i nls_database_parameters
.
I denne session fejler din forespørgsel:
select to_number('100,12') from dual;
Error report -
SQL Error: ORA-01722: invalid number
01722. 00000 - "invalid number"
Jeg kunne ændre min session, enten direkte med alter session
eller ved at sikre, at min klient er konfigureret på en måde, der fører til den indstilling, strengen har brug for (den kan for eksempel være nedarvet fra et operativsystem eller Java-lokalitet):
alter session set NLS_NUMERIC_CHARACTERS = ',.';
select to_number('100,12') from dual;
TO_NUMBER('100,12')
-------------------
100,12
I SQL Developer kan du indstille din foretrukne værdi i Tool->Preferences->Database->NLS.
Men jeg kan også tilsidesætte denne sessionsindstilling som en del af forespørgslen med den valgfri tredje nlsparam parameter til to_number()
; selvom det gør den valgfri anden fmt parameter også nødvendig, så du skal være i stand til at vælge et passende format:
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
Som standard vises resultatet stadig med mine sessionsindstillinger, så decimaladskilleren er stadig et punktum.