我想在SQL Server中存储表示百分数的值,应该选择哪种数据类型?
答案:
答案:
我想在SQL Server中存储代表百分比的值,应该选择什么数据类型?
我想在SQL Server中存储代表百分比的值,应该选择什么数据类型?
在99.9%的情况下,您应该使用decimal(p,s)。
百分比只是一种表示概念:10%仍然是0.1。
当作为实数表达时,只需选择精度和比例以获得预期值/所需小数位数的最高值即可。对于值<100%,可以使p = s,只需根据小数位数做出决定。
但是,如果您确实需要存储100%或1,则需要p = s + 1。
这样可以允许最高达到9.xxxxxx或9xx.xxxx%,因此,如果我只需要最大为1,则会添加检查约束。
FLOAT
和DOUBLE
)。你真的不需要它们,而且它们很容易引起问题。至于分和欧元之间的区别:那是无稽之谈。DECIMAL
是一种精确的数据类型;因此,存储123.45就像存储12345一样准确。在数据库中,将金额存储在其货币而不是子货币中是没有意义的;这只会让人们感到困惑,并可能导致错误的计算和意外的结果。 - Thorsten Kettnerdecimal(p, s) 和 numeric(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)
我同意,DECIMAL是存储这种类型数字的最佳方式。但为了使决策更加容易,应将其存储为1的百分比,而不是100的百分比。这样,无论“整体”数字为多少,您都可以存储所需的小数位数。因此,如果您需要6个小数位,使用DECIMAL(9,8),对于23.3436435%,您存储0.23346435。将其更改为23.346435%是一个显示问题,不是存储问题,大多数演示语言/报表编写器等都可以为您更改显示。
该列的数据类型应为十进制数。