为什么我的 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
。
从documentation我明白了答案。
我没有提到@num1 的精度,所以它采用默认的小数精度为零,因此 s1=0
@num2 = 5 的精度,因此,p2=5
因此 max(6, s1+p2+1) => max(6, 0+5+1) = 6
因此它在答案中显示的比例为 6。
我是 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
。
从documentation我明白了答案。
我没有提到@num1 的精度,所以它采用默认的小数精度为零,因此 s1=0
@num2 = 5 的精度,因此,p2=5
因此 max(6, s1+p2+1) => max(6, 0+5+1) = 6
因此它在答案中显示的比例为 6。