如何在sql server

时间:2016-01-20 09:30:35

标签: sql sql-server

我有像

这样的数据
id
27.45
29.1
27.45
21.95
18.1
51.75
0
21.45
41.94
21.95
32.95

我的查询是

SUM(CASE WHEN ab.dates BETWEEN bc.fst_sales_date AND BC.[WEEK4] THEN
[salesval] -- my initial try  
ELSE 0 END) week4_qtyvalues

面临错误

  

将nvarchar值'41 .94'转换为数据时转换失败   输入int。

我已经检查了

SUM(CASE WHEN ab.dates BETWEEN bc.fst_sales_date AND BC.[WEEK4] THEN
CONVERT(float,[salesval]) -- this is what I've tried  
ELSE 0 end) week4_qtyvalues

SUM(CASE WHEN ab.dates between bc.fst_sales_date AND BC.[WEEK4] THEN
CAST([salesval]AS int) -- this is what I've tried  
ELSE 0 END) week4_qtyvalues

无论我的尝试如何,我仍然面临同样的错误。

3 个答案:

答案 0 :(得分:2)

res

答案 1 :(得分:1)

这种情况正在发生,因为你有一个nvarchar而不是一个浮点数来转换为int。您应该首先将[salesval]转换为float,然后将其转换为int。像这样:

CAST(CAST([salesval] AS float) AS INT)

答案 2 :(得分:0)

由于SQL Server处理混合了多种数据类型的语句的方式,它仍然会尝试获取salesval字段并将其视为int。

所以,首先,尝试转换0。

其次,你几乎肯定不想使用漂浮物 - 它用于科学计算,只需要它的大范围并且不精确。请改为使用十进制。