Sql-Server

從 CSV 文件導入時需要小數點後 2 位的 FLOAT 數據類型

  • December 13, 2017

我正在使用導入/導出嚮導將 CSV 文件導入 SQL Server。CSV 文件中的數據如下所示:

...0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,164051.00,...

所有這些值都是美元金額。由於這是打包的財務軟體(更準確地說是 JD Edwards 9.2),我必須忍受所有列的數據類型都是 FLOAT 並且不,我無法更改它。

使用嚮導導入後,表在這些列中分別具有0和。164051

在執行預打包的 JDE 財務報告時,它包含01640.51作為值,即,它將最後兩位數字解釋為“美分”,對此我無能為力。如果值為 ,則不是問題0,但對於其他一切都是問題。

所以我唯一的選擇是在導入後向列值添加兩個尾隨零。有什麼辦法可以做到這一點?

如果美元金額16578.98在 CSV 文件中,它會很好地導入並正確顯示在報告中。問題僅在於偶數美元金額或金額,如5.80or 6.10

有任何想法嗎?

如果數據僅用於此 JDEdwards 報告,您可以簡單地將美元 (164051, 0, 16578.98) 轉換為美分(乘以 100) (16405100, 0, 1657898)。

如果數據在其他地方以正確的形式正確使用,則創建一個將美元轉換為美分的視圖,並讓 JDE 報告使用該視圖。

如果你得到分數美分( $ 12358.9275), then you’d want to round to remove the fractional part. However, I believe that would be an issue now (it’d be reported as $ 1235892.75,從你所說的)。

我建議將數據“按原樣”導入臨時表,然後使用儲存過程來驗證/將數據轉換為最終目標表。這樣,您可以處理所有“CAST/Convert/LEFT/RIGHT/etc”。那裡的功能。

對於那個特定的轉換,這應該可以工作:

CAST([YourColumnHere] AS DECIMAL(18,2))

例子:

SELECT 
CAST('18.40' AS FLOAT) FloatExample
,CAST(CAST('18.40' AS FLOAT) AS DECIMAL(18,2)) AS DecimalExample


FloatExample    DecimalExample
------------    --------------
18.4            18.40

引用自:https://dba.stackexchange.com/questions/192965