我收到错误消息
Msg 3623, Level 16, State 1, Line 25
An invalid floating point operation occurred.
Run Code Online (Sandbox Code Playgroud)
从SQL Server 11.0.2100(在AWS RDS实例上)进行以下查询:
SELECT SUM(LOG(col + 1)) FROM MyTable;
Run Code Online (Sandbox Code Playgroud)
col的所有值都在-0.1和0.1的范围内.
如果我从查询中删除SUM,它运行正常,这意味着LOG的输入是正确的:
SELECT LOG(col + 1) FROM MyTable;
Run Code Online (Sandbox Code Playgroud)
另外,如果我选择上面的临时表,然后对临时表中的值进行SUM,这也可以正常工作,这意味着SUM没有任何问题:
SELECT LOG(col + 1) thelog INTO #x FROM MyTable;
SELECT SUM(thelog) FROM #x;
DROP TABLE #x;
Run Code Online (Sandbox Code Playgroud)
只有当我一起运行SUM和LOG时才会出现问题.
为什么会这样?是否有可能SQL Server以某种方式将+1重新排列在LOG之外,以便LOG输入超出范围?
注意:在查询中放置一个CASE WHEN col> -1也可以修复它,但这不应该是必需的,因为col + 1的所有值都在范围内.我想知道这可能是什么原因......
浮点值因舍入问题而臭名昭着,因为它们存储为二进制分数,通常没有精确的十进制等值.我认为这里发生的是你的一个值非常接近-1(例如-0.99999999999999999999),当你加1时,它有时可以舍入为0.对于0的输入,LOG函数是未定义的,因此结果是An invalid floating point operation occurred.
| 归档时间: |
|
| 查看次数: |
16758 次 |
| 最近记录: |