nls_session_parameters
をクエリすると、現在のセッション設定を確認できます。 :
select value
from nls_session_parameters
where parameter = 'NLS_NUMERIC_CHARACTERS';
VALUE
----------------------------------------
.,
これは、nls_database_parameters
で確認できるデータベースのデフォルトとは異なる場合があります。 。
このセッションでは、クエリエラー:
select to_number('100,12') from dual;
Error report -
SQL Error: ORA-01722: invalid number
01722. 00000 - "invalid number"
alter session
を使用して、セッションを直接変更できます。 または、文字列に必要な設定につながるようにクライアントが構成されていることを確認します(たとえば、オペレーティングシステムやJavaロケールから継承される場合があります):
alter session set NLS_NUMERIC_CHARACTERS = ',.';
select to_number('100,12') from dual;
TO_NUMBER('100,12')
-------------------
100,12
SQL Developerでは、「ツール」->「設定」->「データベース」->「NLS」で希望の値を設定できます。
ただし、オプションの3番目の nlsparam を使用して、クエリの一部としてそのセッション設定をオーバーライドすることもできます。 to_number()
へのパラメータ;ただし、これによりオプションの2番目の fmt パラメータも必要なので、適切な形式を選択できる必要があります:
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
デフォルトでは、結果はセッション設定で引き続き表示されるため、小数点はピリオドのままです。