ROUND函数和算术溢出

mnm*_*dad 0 sql sql-server rounding

在MS SQL Server中,如果我

SELECT ROUND(9.4, 0), ROUND(8.6, 0), ROUND(10.6, 0)
Run Code Online (Sandbox Code Playgroud)

我不出所料得到:

9.0 9.0 11.0
Run Code Online (Sandbox Code Playgroud)

但如果我这样做

SELECT ROUND(9.6, 0)
Run Code Online (Sandbox Code Playgroud)

我明白了:

消息8115,级别16,状态2,行1算术溢出错误将表达式转换为数据类型数字.

我知道我可以CAST(9.6 as DECIMAL(10,0)),但这里发生了什么?

TIA

Sam*_* cd 5

SQL将第一个参数作为数据类型,在本例中为DECIMAL(2,1).预期结果10.0应该DECIMAL(3,1)是您收到错误的类型.

尝试:

SELECT ROUND(cast(9.6 as decimal(2,1)), 0)
Run Code Online (Sandbox Code Playgroud)

然后尝试:

SELECT ROUND(cast(9.6 as decimal(3,1)), 0)
Run Code Online (Sandbox Code Playgroud)