在SQL-Server中存储百分比值的最佳方法是什么?
我想在SQL服务器中存储一个代表百分比的值,哪个数据types应该是首选的?
十进制(p,s)和数字(p,s)
p(精度):
将要存储的最大小数位总数(小数点的左边和右边)
s(比例):
将存储在小数点右侧的小数位数( – > s定义了小数位数)
0 <= s <= p。
- p …总位数
- s …小数点右边的位数
- 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
你应该在99.9%的情况下使用十进制(p,s) 。
百分比只是一个expression概念:10%仍然是0.1。
当以实数表示时,只需select最高期望值/所需小数位的精度和比例。 对于<100%的值,可以有p = s,只需根据小数位数来决定。
但是,如果您确实需要存储100%或1,那么您将需要p = s + 1。
这然后允许9.xxxxxx或9xx.xxxx%,所以我会添加一个检查约束,以保持最大1,如果这是我所需要的。
我认为应该使用十进制(p,s),而s表示百分比能力。 'p'可能是1,因为我们永远不会需要超过一个字节,因为这个点左边的每个数字都是一个百分数,所以p必须至less是s + 1,以便你能够存储高达1000%。 但SQL不允许“p”小于s。
例如: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))。
等等
我同意,DECIMAL是你应该存储这种types的号码的地方。 但为了使决策更容易,将其存储为1的百分比,而不是100的百分比。这样,无论“整数”是多less,都可以精确地存储所需的小数位数。 所以,如果你想要6位小数,使用十进制(9,8)和23.3436435%,你存储0.23346435。 更改为23.346435%是显示问题,而不是存储问题,大多数演示语言/报告编写者等都可以为您更改显示。
该列的数据types应该是十进制的。