2016-04-15 1 views
0

数字の変換にフォーマットマスクを設定して、何かに関わらずカンマを常に「小数点区切り」にするセッションで設定します。言い換えれば、私は、このフォーマットマスクが常にOracleデータベースの任意のローカライゼーションで勝つようにすることを目指しています。カンマをスクリプトの小数点区切りにして、Oracleデータベースの任意のローカライゼーションで実行することを指定しました

私のセッションは私がtheeseコマンドを発行すると、私が取得

NLS_NUMERIC_CHARACTERS=',.' 

を設定しました:

SELECT TO_CHAR(100.34,'fm099999999999999D00') FROM DUAL; 
000000000000100,34 -- as desired 

SELECT TO_CHAR(100.34,'fm099999999999999.00') FROM DUAL; 
000000000000100,34 -- as desired 

SELECT TO_CHAR(100.34,'fm099999999999999,00') FROM DUAL; 
000000000000001,00 -- NOT What I want!! because ',' is for thousands 

変更することなく、「桁区切り」と「コンマ」を強制する方法はあります現在のセッション?

+0

あなたの第三の試みで、問題は2,000,000で、Oracleは表示しないということですTHOUSANDSセパレータとして、それは単に「グループ」セパレータとして表示されます。インド( "lakh")表記法では、同じ数は20,00,000です。異文化間で異なる数字をグループ化すると(整数の場合)、オラクルはあなたが話すことを何でもします。私の答えと同じように、数字をグループ化する必要がある場合(任意のマスクに従って)、明示的ではなくGを使用します。 - 次にNLS_NUMERIC_CHARACTERSを明示的に渡すか、セッションのデフォルトを使用します。 – mathguy

答えて

2

小数点を表すDと、最初の書式マスクを使用して、TO_CHARへの明示的な最後のパラメータとしてNLS_NUMERIC_CHARACTERを渡す:

SQL> SELECT TO_CHAR(100.34,'fm099999999999999D00') FROM DUAL; 

TO_CHAR(100.34,'FM0 
------------------- 
000000000000100.34 

1 row selected. 

Elapsed: 00:00:00.15 
SQL> SELECT TO_CHAR(100.34,'fm099999999999999D00', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL; 

TO_CHAR(100.34,'FM0 
------------------- 
000000000000100,34 
関連する問題