这让我们感到困惑......
我们有一个使用 CAST 将浮点数转换为小数的查询,此查询连接多个表以查找要返回的行。其中一个表中的一行包含一个值,当 CAST 转换为小数时会导致算术溢出错误。
奇怪的是,具有此值的行不是结果集中返回的行之一。
过于简化的例子:
ID Value
1 1.1
2 11.1
3 11111.1
询问:
SELECT Id, CAST(value as decimal(4,1))
FROM <complex number of joins>
WHERE <conditions that don't return row with Id 3>
... 算术错误
如果我们在 WHERE 子句中明确排除该行,那么错误就会消失。例如。WHERE ... AND Id <> 3
.. 工作正常
有谁知道这怎么可能?
注意:这里的问题不是 CAST 在 ID 为 3 的行上失败!问题是 WHERE 子句排除了 ID 为 3 的行,但查询仍然失败。如果 WHERE 子句没有返回值为 11111.1 的行,查询如何失败?