SELECT ROUND(99.12,-1);
Msg 8115,Level 16,State 2,Line 1算术溢出错误 将表达式转换为数据类型数字。
表达式范围为:
时会出现此错误但是当您在Oracle DB中执行相同的查询时,它可以正常工作并提供预期的输出。
SELECT ROUND(99.12,-1) FROM DUAL;
ans: 100
所以有人可以解释,为什么它在sqlserver2008
中的行为提前致谢
答案 0 :(得分:3)
执行SELECT ROUND(99.12,-1)
时,第一个参数隐含NUMERIC(4,2)
,并且在小数位前不允许超过2位。
95.00到99.99失败的原因是它们被舍入到100,这不适合NUMERIC(4,2)
。类似的逻辑适用于您的其他边缘情况。
阅读this MSDN article进行令人大开眼界的讨论。
答案 1 :(得分:1)
SELECT ROUND(CAST(99.12 AS DECIMAL(5, 2)),-1);