2017-02-17 7 views
0

10500.37を通貨としてOracleを使用して$ 10,500.37に変換する際に問題があります。私は現在、Oracle SQL開発者を使用しています。Oracleの生番号を変換する

これは私がやったことです:デュアルFROM

SELECT TO_NUMBER( '10500.37'、 '$ 10,500.37') 。

これを修正する方法やフォーマットモデルを正しく使用しているかどうかはわかりません。いくつかの助けを感謝します!

答えて

0

数字を書式設定された文字列に変換しているので、to_number()ではなく、to_char()が必要です(逆の変換方法)。あなたが対処する必要があります最高値のための十分なリード9つのプレースホルダ(およびグループセパレータを)必要

SELECT to_char(10500.37, 'L999G990D00') FROM Dual; 

TO_CHAR(1050 
------------ 
    $10,500.37 

これは、1つの可能な書式モデルです。

数字形式のモデルare listed in the documentation

私はグループセパレータ(コンマをハードコーディングするのではなく)と小数点の区切り文字(ピリオドをハードコーディングするのではなく)を使用しました。そして私はLを現地通貨記号に使用しました。これらのすべては、クライアントのNLS設定に依存します。

alter session set nls_territory='GERMANY'; 

SELECT to_char(10500.37, '$999,990.00') FROM Dual; 

TO_CHAR(1050 
------------ 
    $10,500.37 

alter session set nls_territory='UNITED KINGDOM'; 

SELECT to_char(10500.37, 'L999G990D00') FROM Dual; 

TO_CHAR(10500.37,'L99 
--------------------- 
      £10,500.37 

alter session set nls_territory='GERMANY'; 

SELECT to_char(10500.37, 'L999G990D00') FROM Dual; 

TO_CHAR(10500.37,'L99 
--------------------- 
     €10.500,37 

alter session set nls_territory='AMERICA'; 

SELECT to_char(10500.37, 'L999G990D00') FROM Dual; 

TO_CHAR(10500.37,'L99 
--------------------- 
      $10,500.37 

あなたは関係なく、NLSの設定の同じ出力を得るように、あなたはは、それらのいくつかまたはすべてのために、代わりに固定値を使用することもできます

+2

より一般的に、通貨記号をセッションのNLSパラメータから独立させるために、 'to_char()'は引数 '' nls_currency = 'をとります。これは、通貨記号が$でない場合に必要です($は書式モデルで直接使用できるため、他の記号では使用できません)。 – mathguy

+0

はうまくいった!どうもありがとうございます! – Maha

関連する問題