Du kan se dina nuvarande sessionsinställningar genom att fråga nls_session_parameters
:
select value
from nls_session_parameters
where parameter = 'NLS_NUMERIC_CHARACTERS';
VALUE
----------------------------------------
.,
Det kan skilja sig från databasens standardinställningar, som du kan se i nls_database_parameters
.
Under den här sessionen uppstod din fråga:
select to_number('100,12') from dual;
Error report -
SQL Error: ORA-01722: invalid number
01722. 00000 - "invalid number"
Jag kunde ändra min session, antingen direkt med alter session
eller genom att se till att min klient är konfigurerad på ett sätt som leder till den inställning som strängen behöver (den kan till exempel ärvas från ett operativsystem eller Java-lokal):
alter session set NLS_NUMERIC_CHARACTERS = ',.';
select to_number('100,12') from dual;
TO_NUMBER('100,12')
-------------------
100,12
I SQL Developer kan du ställa in ditt föredragna värde i Verktyg->Inställningar->Databas->NLS.
Men jag kan också åsidosätta den sessionsinställningen som en del av frågan, med den valfria tredje nlsparam parameter till to_number()
; även om det gör den valfria andra fmt parameter nödvändig också, så du måste kunna välja ett lämpligt 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 visas resultatet fortfarande med mina sessionsinställningar, så decimalavgränsaren är fortfarande en punkt.