什么应该是存储在SQL-Server中的百分比值的最佳方法?(What should be the

2019-08-31 07:15发布

我希望存储表示在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:

列的数据类型应是小数。



文章来源: What should be the best way to store a percent value in SQL-Server?