为什么我的 SQL 服务器十进制除法给我的小数位数是 6 位?

Why does my SQL Server decimal division give me a scale of 6 digits?

我是 SqlServer 的新手,正在使用 SQLServer2019。我了解了 CAST() 和 CONVERT() 内置函数。现在我很困惑为什么我的代码给出的比例是 6。

DECLARE @num1 AS int = 4;
DECLARE @num2 AS int = 127;
select @num2/Convert(decimal(5,2), @num1) as 'Div result';
select CONVERT(decimal(4,2), @num1);
select CAST(@num1 as decimal(4,2));

上面sql查询的结果是:

31.750000

4.00

4.00

我正在尝试将除法结果缩放到小数点后 3 位,但它不起作用。

第 4 行和第 5 行工作正常,但为什么第 3 行会这样?

提前致谢。

根据 SQL 服务器文档,对于十进制除法,结果值的小数位数是:

max(6, s1 + p2 + 1)

你的情况是 max(6, 0 + 5 + 1) = 6

来源:Precision, Scale, and Length (Transact-SQL)

documentation我明白了答案。

我没有提到@num1 的精度,所以它采用默认的小数精度为零,因此 s1=0

@num2 = 5 的精度,因此,p2=5

因此 max(6, s1+p2+1) => max(6, 0+5+1) = 6

因此它在答案中显示的比例为 6。