2017-11-09 11 views
0

小数点記号の後の数字が異なる場合、OracleのNVARCHARをどのように変換できますか?数字へのCovert NVARCHAR(小数点記号の後の数字が異なる)

私は次の式を使用して、日付に変換するためにはこれが必要:

select to_date('12/30/1899', 'MM/DD/YYYY') + 40676.2641666667 
from dual; 

ものは第二部(40676.2641666667)内の数字はので、私はTO_NUMBER(t.columnを、使用することができます変化することがあります'99999D9999999999')、これはこの方法では機能しないためです。

ご意見はありますか?

+0

そのコードが失敗していますか? –

+0

いいえ、それは動作しますが、私の列はNVARCHARにあり、使用しようとすると失敗します。 コードを に変更する必要がありますto_date('12/30/1899 '、' MM/DD/YYYY ')+ t.columnを選択してください –

答えて

0

これらの私のためにすべての作業:

select (date '1899-12-30') + '40676.2641666667' 
from dual 

と:

select (date '1899-12-30') + cast('40676.2641666667' as number) 
from dual 

と:

select (date '1899-12-30') + 40676.2641666667 
from dual 

1つの警告は、国際化の設定は、コンマの代わりにピリオドを必要とするかもしれないということです。

+0

こんにちは!これは、40676.2641666667または40676.26416555555または40676.346333という単一のレコードを使用する場合に機能しますが、how列は使用できません。私はキャスト(数字としてt.column)を試しましたが、うまくいきません。 @SammyMerk。 –

+0

。 。これらのいずれも定数としてだけでなく列名でも動作します。しかし、あなたが求めた質問に答えることは可能であり、この質問は一定の価値に関するものです。私は、サンプルデータ、テーブル定義、および国際化設定を提供する別の質問をすることをお勧めします。 –

0

OracleにはNVARCHARがありません。NVARCHAR2はあります。私にとっては、次の作品:

DECLARE 
    nv_Number  NVARCHAR2(0032) := 40676.2641666667; 
    dt_Base  DATE   := TO_DATE('12/30/1899', 'MM/DD/YYYY'); 
    dt_Result  DATE; 
BEGIN 
    dt_Result := dt_Base + TO_NUMBER(nv_Number); 
    DBMS_OUTPUT.PUT_LINE(TO_CHAR(dt_Result,'yyyymmdd hh24:mi:ss')); 
END; 

結果:20110513午前6時20分24秒

関連する問題