将NVARCHAR转换为DECIMAL:所有小数丢失



我正在将数据从CSV文件加载到staging表(使用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和小数的组合。

Decimal是一个定点数,它具有声明的小数位数(也称为刻度)。当您将列声明为类型DECIMAL时,您将得到一个具有精度18和比例0的小数(源)。换句话说,它只能存储整数值(整数),并删除小数点后的任何内容。

您需要声明所需的小数数,例如DECIMAL(18, 2)为两个小数。快速查看您的屏幕截图表明您需要DECIMAL(18, 8)。唯一的其他选择是使用FLOAT(双精度),但这可能导致精度的损失。在某些数据库系统中,您也有DECFLOAT(十进制浮点数)类型,但SQL Server没有此类型。

最新更新