我希望存储表示在SQL Server%的值,什么样的数据类型应该是一个者优先?
Answer 1:
十进制(P,S)和数字(P,S)
P(精度):
的将要存储(二者的左侧和小数点的右边)十进制数字的最大总数
S(标):
将要存储到小数点右边的小数位数( - > s定义小数的数量)
0 <= S <= P。
- p ...总的数字位数
- 小号......位数小数点右边
- PS ...位数小数点左边
例:
CREATE TABLE dbo.MyTable
( MyDecimalColumn decimal(5,2)
,MyNumericColumn numeric(10,5)
);
INSERT INTO dbo.MyTable VALUES (123, 12345.12);
SELECT MyDecimalColumn, MyNumericColumn FROM dbo.MyTable;
结果:
MyDecimalColumn: 123.00 (p=5, s=2)
MyNumericColumn: 12345.12000 (p=10, s=5)
链接:msdn.microsoft.com
Answer 2:
您应该使用十进制(P,S)的病例中99.9%。
百分比仅仅是一个演示概念:10%仍是0.1。
当为实数表示只要选择精度和规模的最高预期值/所需的小数位。 你可以有P = S的值<100%,基于小数简单地决定。
然而,如果你确实需要存储100%或1,那么你就需要P = S + 1。
这就允许多达9.xxxxxx或9xx.xxxx%,所以我增加一个检查约束,以保持其最大值为1,如果这是我所需要的。
Answer 3:
我同意,小数,你应该存储该类型的号码。 但是,为了使决策更容易,它存储为1的百分比,而不是为100的百分比就可以准确地存储需要,无论“整体”号的小数位数量的方式。 所以,如果你想小数点后6位,使用十进制(9,8)和23.3436435%,您存储0.23346435。 将其更改为23.346435%,是一个显示问题,而不是一个存储的问题,大多数演示语言/报告撰写等能够改变显示你的。
Answer 4:
我认为小数(P,S),而s表示百分比能力应该被使用。 将“P”可能的了,甚至1日起,我们将永远不会需要超过一个字节,因为在该点的左侧每个数字是一个近百%,因此该p必须至少S + 1,为了您应该能够存储高达1000%。 但SQL不允许“P”是比规模较小的。
实例:28.2656579879%应为小数(13,12)和应当被存储00.282656579879 128.2656579879%应为小数(13,12)和应当被存储01.282656579879
28%应存放在十进制(3,2)为0.28 128%应存放在十进制(3,2)为1.28
注意:如果你知道你不会达到100%(即你的价值永远比使用十进制(S,S)小于100%,如果会,使用十进制(S + 1,S)。
等等
Answer 5:
列的数据类型应是小数。