我正在將資料從 CSV 檔案加載到臨時表(使用 BULK INSERT),其中所有列型別都是 NVARCHAR(100)。這很好用。
然后的想法是將該資料插入生產表中,同時更改資料型別。
當嘗試將具有數值的列從 NVARCHAR 轉換為 DECIMAL 時,所有小數都消失了。
創建臨時表并將其插入生產表:
DROP TABLE IF EXISTS [dbo].[factFinanzbuchhaltung]
GO
CREATE TABLE [dbo].[factFinanzbuchhaltung]
(
Wert DECIMAL
)
GO
INSERT INTO [dbo].[factFinanzbuchhaltung]
SELECT CONVERT(DECIMAL(25, 2), ROUND(Wert,2))
FROM [dbo].[Stage_factFinanzbuchhaltung]
資料在轉換前后的樣子
我究竟做錯了什么?我覺得我嘗試了 CONVERT、CAST 和小數位數的非常組合。用我們的不四舍五入。
uj5u.com熱心網友回復:
Decimal 是一個定點數,它具有宣告的小數位數(又名scale)。當您將列宣告為 typeDECIMAL時,您會得到一個精度為18 且小數為0 的小數(source)。換句話說,它只能存盤整數值(整數),并洗掉小數點后的任何內容。
您需要宣告所需的小數位數,例如DECIMAL(18, 2)兩位小數。快速查看您的螢屏截圖表明您需要DECIMAL(18, 8). 唯一的其他選擇是使用FLOAT(雙精度),但這可能會導致精度損失。在某些資料庫系統中,您還具有DECFLOAT(十進制浮點)型別,但 SQL Server 沒有這種型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/533254.html
