当我尝试使用除数运算,其中分子是十进制(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
有人可以解释为什么会有这么大差异吗?
答案 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
。 :)