更改列数据类型后,截断(使用ROUND)已停止工作

时间:2012-07-06 15:36:33

标签: sql-server sql-server-2008

我在第三方产品的SQL Server 2008数据库上使用以下查询来生成一些报告。

SELECT ROUND(SUM(Price),0,1) AS SumNetPrice FROM Transactions

例如

 SUM(Price): 1.2345678
 ROUND(SUM(Price),0,1): 1

到目前为止,此工作正常并删除了所有小数位。事实上,即使我没有根据ROUND函数上的MSDN信息http://msdn.microsoft.com/en-us/library/ms175003.aspx指定第3个参数,结果也会被截断。

第三方公司现在已将Price列的数据类型从“real”更改为decimal(22,7)。不幸的是,这意味着即使我使用ROUND函数的truncate选项,我总是得到7位小数。所以现在我得到了:

 ROUND(SUM(Price),0,1): 1.0000000

不应该ROUND(表达式,0,1)截断结果,所以我没有得到任何小数位?如何从SQL查询中的结果中删除这些小数位?

2 个答案:

答案 0 :(得分:2)

为了让它按照之前的工作方式工作,将类型从十进制转换为实数。这是您更新的查询以获得所需的输出。

select Cast(ROUND(SUM(Price),0,1) as Real) AS SumNetPrice FROM Transactions

答案 1 :(得分:1)

SELECT CAST(ROUND(SUM(Price),0,1) AS DECIMAL(22,0)) AS SumNetPrice FROM Transactions