2016-08-03 5 views
0

カンマをポイントに置き換える必要があります。その場合、値を数字にする必要があります。小数点の桁区切りoracle

select replace('12345,6789', ',' , '.') from dual --it works fine 

が、その後、私は価値to_numberを変換したいと、私はエラーを取得:

"invalid number"

+0

http://stackoverflow.com/search?q=NLS_NUMERIC_CHARACTERS [NLSの – Mottor

+2

可能な複製を\ _NUMERIC \ _CHARACTERS小数点の設定](http://stackoverflow.com/questions/24571355/nls-numeric-characters-setting-for-decimal) – Mottor

答えて

3

to_number() functionはコンマとピリオドを解釈する方法を決定するには、セッションのNLS_NUMERIC_CHARACTERS設定を使用し は、だから私はこれを書きました。あなたの文字列が常に小数点の区切り記号としてカンマを持つことがわかっている場合は、オプションの第3引数を使用して、コールの一部としてその文字列を上書きすることができます。あなたが別のreplace()ステップを必要としない

select to_number('12345,6789', '9999999999D9999', 'NLS_NUMERIC_CHARACTERS='',.''') 
from dual; 

TO_NUMBER('12345,6789','9999999999D9999 
--------------------------------------- 
          12345.6789 

:それはどういう意味が、あなたは、書式モデルを指定する必要があります。

ALTER SESSION SET NLS_NUMERIC_CHARACTERS=',.';でセッションの設定を変更することもできますが、コードを実行する必要があるすべてのクライアントで設定を制御できない場合があります。

1

小数点記号はロケールで定義されています。ここには,のように見えます。つまり、あなたの文字列を変換する前に交換をしない必要があります。

select to_number('12345.6789') from dual --should work already 

またはあなたのロケールを変更:

alter session set NLS_NUMERIC_CHARACTERS= '.,'; 
select to_number('123'||'.'||'456') from dual; 
select to_number(replace('12345,6789', ',' , '.')) from dual 
関連する問題