我想在SQL Server中存储一个代表百分比的值,哪种数据类型应该是首选?
我想在SQL Server中存储一个代表百分比的值,哪种数据类型应该是首选?
Answers:
十进制(p,s)和数字(p,s)
p(精度):
将存储的最大十进制数字总数(在小数点的左边和右边)
s(比例):
将存储在小数点右边的小数位数(-> s定义小数位数)
0 <= s <= p。
例:
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)
FLOAT
和DOUBLE
)。您真的不需要它们,它们很容易引起问题。至于美分兑欧元:那是胡说八道。DECIMAL
是精确的数据类型;因此,将123.45精确地存储为12345。它只会使人感到困惑,并可能导致错误的计算和意外的结果。
我认为十进制(p,s)应使用而s表示百分比能力。'p'可能为偶数,因为我们永远不需要一个以上的字节,因为该点左侧的每个数字都是一个百分数,所以p必须至少为s + 1,以便您能够最多可存储1000%。但是SQL不允许'p'小于s。
示例:28.2656579879%应该为十进制(13、12)并应存储00.282656579879 128.2656579879%应该为十进制(13、12)并应存储01.282656579879
28%应以0.28的形式存储在十进制(3,2)中128%应以1.28的形式存储在十进制(3,2)中
注意:如果您知道不会达到100%(即,您的值将始终小于使用小数(s,s)的100%,如果会,则使用小数(s + 1,s)。
等等