Sql server 2008 r2 Varchar到数字的转换

Sql server 2008 r2 Varchar到数字的转换,sql-server-2008-r2,Sql Server 2008 R2,我已使用SSIS将excel数据加载到表中 表结构: Monthly_Budget SEQUENCE INT IDENTITY, TRANSACTION_DATE VARCHAR(100), TRANSACTION_REMARKS VARCHAR(1000), WITHDRAWL_AMOUNT VARCHAR(100), DEPOSIT_AMOUNT VARCHAR(100), BALANCE_AMOUNT VARCHAR(100) 取款

我已使用SSIS将excel数据加载到表中

表结构:

Monthly_Budget

SEQUENCE            INT IDENTITY,
TRANSACTION_DATE    VARCHAR(100),
TRANSACTION_REMARKS VARCHAR(1000),
WITHDRAWL_AMOUNT    VARCHAR(100),
DEPOSIT_AMOUNT      VARCHAR(100),
BALANCE_AMOUNT      VARCHAR(100)
取款金额列中的值:

7,987.00
1,500.00
7,000.00
50.00
NULL
253.00
4,700.00
2,000.00
148.00
2,000.00
64.00
1,081.00
2,000.00
NULL
NULL
7,000.00
现在,我正在尝试运行一个查询,以获取WITHDRWAL_AMOUNT下的值的总和,但出现了一个错误:

Error converting data type varchar to numeric.
我的问题是:

SELECT SUM(CAST(ISNULL(LTRIM(RTRIM(WITHDRAWL_AMOUNT)),0) AS NUMERIC(6,2))) AS NUM FROM MONTHLY_BUDGET

试着像这样转换它们:

select SUM(CAST(ltrim(rtrim(replace(WITHDRAWL_AMOUNT, ',', ''))) as numeric(6, 2)) )

最好将值存储在您想要的适当类型中。但是,我可以理解将外部数据放入临时表,然后使用上述逻辑将数据加载到最终表中。

您的问题源于糟糕的数据库设计:所有这些字段都不应该是varchar。使用适当的数据类型!我将这些字段用作varchar,以便能够正确地将数据从excel加载到表中(数据转换,数据类型(DT_STR))。在更改表结构后,我还尝试使用DT_NUMERIC,但它不起作用。请使用适当的数据类型。导入和使用sql server表中的适当数据类型之前,在excel或SSIS中调整数据要容易得多。相信我。SSI将允许您选择更好的数据类型。