2017-08-24 38 views
0

我一直在評論沒有小數空格的貨幣列。這是來自加載到我們的Oracle數據庫中的遺留系統的輸出。沒有小數的貨幣列:以十進制加上

如果該字段有三個或更多的數字,它應該在右邊三個空格處有一個小數。

如果該值少於三個數字,它應該有一個小數點和一個前導零。

例如:

  • 2050應轉換爲2.050
  • 110應轉換爲0.110
  • 50應該轉換爲0.050

我已經嘗試使用強制轉換,但我收到錯誤「無效的數據類型」。

這是一個基本的select語句:

select 
    customer_id 
    cast(ENDING_BALANCE as (decimal(10,3)) as Bal_1 
    from Current_Balances 

任何建議,將不勝感激。

+0

你看起來在小數詞之前有一個額外的括號。嘗試'鑄造(ENDING_BALANCE爲十進制(10,3))' – scsimon

+0

感謝您的catch @scsimon。這次它跑了,但沒有加上小數。 – Lyndey

+0

輸入的數據類型是什麼?他們是NUMBER還是VARCHAR2?結果的期望數據類型是什麼 - NUMBER或VARCHAR2? – mathguy

回答

2

我想你需要通過1000

SELECT CAST(CAST('2050' as INT)/1000 as DECIMAL(10,3)) FROM DUAL 

將其轉換爲數值和除法如果你真的是有輸出格式看起來就像是,你需要TO_CHAR它

SELECT LTRIM(TO_CHAR(CAST('2050' as INT)/1000, 'FM0.000'), '0') FROM DUAL