【发布时间】:2018-04-10 05:21:20
【问题描述】:
对具有 SQL Server 2008、SQL 2012、SQL 2014 和 SQL Server 2016 兼容模式的数据库执行以下语句。
SQL Server 2008、SQL Server 2012 和 SQL Server 2014 返回的结果相同,除了 SQL Server 2016。
SQL语句:
DECLARE @VarFloat FLOAT
SET @VarFloat = 1.90255
SELECT ROUND(@VarFloat, 4) Variable_Float, ROUND(1.90255, 4) Input_Float
在 SQL Server 2008 / 2012 / 2014 上执行时的结果:
Variable_Float Input_Float
---------------------- -----------
1.9026 1.90260
在 SQL Server 2016 上执行时的结果:
Variable_Float Input_Float
---------------------- ------------
1.9025 1.90260
SQL Server 2016 舍入不同于以前的版本,似乎已经向下舍入了该值。有没有人遇到过类似的问题?
谢谢!
【问题讨论】:
-
这在 SQL 中可能是允许的,但这看起来要么是一个非常激进和奇怪的性能优化,要么是一个无意的错误。请注意,如果
VarFloat设置为1.9025500000000001,它会向上取整,因此 var 不会被截断为 32 位或类似的值。
标签: sql-server