SQL Server:在除法运算中键入转换

时间:2018-02-27 21:42:26

标签: sql-server

当我尝试使用除数运算,其中分子是十进制(18,2)并且分母是varchar,它在不进行任何转换的情况下以不同的比例反对十进制数,它会返回不正确的值。

例如:

SELECT 925.16/'3.6678'

返回错误的结果 - 252.08719346

当我尝试使用转换为varchar值时:

SELECT 925.16/Convert(decimal(18,2),'3.6678')

它仍会返回错误的结果 - 252.087193460490463215258

如果我转换为浮动:

SELECT 925.16/Convert(float,'3.6678')

它将返回正确的值 - 252.238399040297

有人可以解释为什么会有这么大差异吗?

1 个答案:

答案 0 :(得分:1)

这与数据优先级有关。您有一个包含2种不同数据类型的等式,decimal(5,2)varchar(6)。十进制的优先级高于varchar,因此varchar转换为decimal(5,2),即3.67。所以,你得到的结果实际上是正确的:

925.16 / 3.67 = 252.087193

至于CONVERT(decimal(18,2)为什么你希望这是正确的结果?你正在剥离小数位,当然它会“错误”。

那么,我们学到了什么?不要将数字存储为varchar。 :)