如何对 Varchar 数据类型求和

Bel*_*igh 3 sql-server t-sql sql-server-2008-r2

在 SQL Server 2008 中,我有一个结构相似的表。不幸的是,改变数据结构不是一种选择,所以我一直试图想出一个替代方案。我曾尝试运行此查询,但出现以下错误:

(受影响的 5 行)
消息 8114,级别 16,状态 5,第 9行将
数据类型 varchar 转换为数字时出错。

这是 DDL - 应该在查询中更改什么语法才能接收有效输出而不是错误消息?

Declare @GreenHouse Table
(nomen varchar(100), vtc varchar(100), d1 date)

Insert Into @GreenHouse (nomen, vtc, d1) VALUES
('Green', '507.02', '2016-01-14'), ('Green', '4.44089e-015', '2016-01-03')
,('Green', '200.57', '2016-01-18'), ('Green', '649.01', '2016-01-19'),
('Green', '1849.85', '2016-04-30')

Select nomen, Round(Sum(Cast(vtc As Decimal(10,2))),0.00) As FormatedInfo, d1
FROM @GreenHouse Group By nomen, d1 Order By d1 DESC 
Run Code Online (Sandbox Code Playgroud)

Lam*_*mak 9

4.44089e-015是最有可能试图将其转换为一个给你的错误decimal。尝试使用float

SELECT  nomen, 
        ROUND(SUM(CAST(vtc AS float)),0.00) FormatedInfo, 
        d1
FROM @GreenHouse 
GROUP BY nomen, d1 
ORDER BY d1 DESC;
Run Code Online (Sandbox Code Playgroud)

您的样本数据的结果是:

?????????????????????????????????????
? nomen ? FormatedInfo ?     d1     ?
?????????????????????????????????????
? Green ?         1850 ? 2016-04-30 ?
? Green ?          649 ? 2016-01-19 ?
? Green ?          201 ? 2016-01-18 ?
? Green ?          507 ? 2016-01-14 ?
? Green ?            0 ? 2016-01-03 ?
?????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

(是的,我知道它将4.44089e-015值转换为0,但预计它是一个浮点数)