提问人:Anupam datta 提问时间:6/24/2020 最后编辑:HeinziAnupam datta 更新时间:6/24/2020 访问量:410
为什么我的 SQL Server 十进制除法给我 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 行的行为是这样的?
先谢谢你。
答:
2赞
Heinzi
6/24/2020
#1
根据 SQL Server 文档,对于小数除法,结果值的小数位数为:
max(6, s1 + p2 + 1)
就你而言,那是.max(6, 0 + 5 + 1) = 6
源:精度、小数位数和长度 (Transact-SQL)Source: Precision, Scale, and Length (Transact-SQL)
评论
0赞
Anupam datta
6/24/2020
但是@Heinzi我使用了 scale = 2, precision=5,那么应该像 (max, 2+5+1) = 8。不是吗?或者我做错了什么。请纠正我。我很困惑。
0赞
Anupam datta
6/24/2020
谢谢@Heinzi的帮助和链接。我明白了解决方案
0赞
Heinzi
6/24/2020
@Anupamdatta:你把它倒过来了:s1 指的是第一个数字的刻度。由于除以 ,s1 是指 的刻度。 是一个整数,其小数位数为 0。@num2/...
@num2
@num2
0赞
Anupam datta
6/24/2020
#2
从文档中,我理解了答案。
我没有提到 @num1 的精度,所以十进制的默认精度为零,因此 s1=0
精度 @num2 = 5,因此 p2=5
因此,最大值(6, S1+P2+1) => 最大值(6, 0+5+1) = 6
因此,它在答案中显示 6 分。
评论
max(6, ...)