保持百分比值从0.00%到100.00%的最佳数据类型是什么?适用于保存百分比值的数据类型?
回答
假设您的百分比有两位小数,您使用的数据类型取决于您计划如何存储百分比。如果你打算存储它们的小数部分(例如100.00%存储为1.0000),我会将数据存储在decimal(5,4)
数据类型中,其约束条件可确保数值永远不会超过1.0000(假设这是上限),并且永远不会低于0(假设是发言权)。如果要存储其面值(例如,100.00%存储为100.00),则应该使用decimal(5,2)
以及适当的CHECK
约束。结合一个好的列名,它可以让其他开发人员清楚数据是什么以及数据如何存储在列中。
不应该是'decimal(5,2)'其中2表示小数点分隔符后的位数? – 2012-06-15 13:20:36
@BorisCallens - 不能相信我错过了这些年。是的,这是一个错字。 'decimal(5,2)'是应该用检查约束捕获的。 – Thomas 2012-06-15 16:19:21
很高兴帮助:) – 2012-06-21 18:49:22
如果2位小数是您的精度级别,那么“smallint”会在最小的空间(2字节)中处理这个。您存储的百分比乘以100.
编辑:decimal类型可能是一个更好的匹配。然后你不需要手动缩放。每个值需要5个字节。
使用数字(n,n)其中n有足够的分辨率可舍入到1.00。例如:
declare @discount numeric(9,9)
, @quantity int
select @discount = 0.999999999
, @quantity = 10000
select convert(money, @discount * @quantity)
这个问题有相当高的评价从三年前接受的答案。如果你正在寻找旧的问题来回答,请参考这里:http://stackoverflow.com/unanswered – valverij 2013-07-29 21:14:46
- 保持为
decimal
。 - 如果您想限制范围(例如0到100%;在某些情况下可能有正当理由超过100%或甚至可能超出负数),请添加检查约束。
- 将值1视为100%,0.5视为50%等。这将允许任何数学运算按预期工作(即,与使用值100作为100%相反)。
- 根据需要修改精度和缩放比例(这些是括号内的两个值
columnName decimal(precision, scale)
。精度表示可以在数字中保留的位数的总数,比例表示这些数字中有多少位在小数点后面,因此decimal(3,2)
是这可以表示为#.##
数;decimal(5,3)
将##.###
decimal
和numeric
基本上是相同的事情。然而decimal
符合ANSI标准,因此请务必使用除非特别指出(由贵公司的编码标准EG)
示例方案
- 对于您的情况(0.00%至100.00%),您需要
decimal(5,4)
。 - 对于最常见的情况(0%至100%),您需要
decimal(3,2)
。 - 在两者的上述情况,检查约束将是相同的
实施例:
if object_id('Demo') is null
create table Demo
(
Id bigint not null identity(1,1) constraint pk_Demo primary key
, Name nvarchar(256) not null constraint uk_Demo unique
, SomePercentValue decimal(3,2) constraint chk_Demo_SomePercentValue check (SomePercentValue between 0 and 1)
, SomePrecisionPercentValue decimal(5,2) constraint chk_Demo_SomePrecisionPercentValue check (SomePrecisionPercentValue between 0 and 1)
)
进一步阅读:
我同意托马斯,我会选择十进制(5,4)解决方案,至少在WPF应用程序。
看一看在MSDN数字格式字符串知道为什么: http://msdn.microsoft.com/en-us/library/dwhawy9k#PFormatString
的百分比(“P”)格式说明乘以100多家并将其转换为一个表示百分比的字符串。
然后你就可以在你的XAML代码使用此:
DataFormatString="{}{0:P}"
- 1. Hive中用于百分比的数据类型是什么?
- 2. 百分比值存储在数据库
- 3. 将百分比值传递到数据框时保留百分比格式
- 4. 基于百分比的数值概率
- 5. 根据百分比值更改CSS类
- 6. Spark:列值的百分比百分比
- 7. jQuery IF不适用于位置相对+百分比值
- 8. 插入excel中的百分比类型数据
- 9. 摊销适用于App Engine的分配(和百分比)计算?
- 10. C#:保存百分比,50或0.50?
- 11. 适用于Windows.System.Colors的MSAccess数据类型
- 12. 不适用于Android Studio的教师的百分比应用
- 13. SQL - 哪种数据类型表示百分比?
- 14. 数据百分比卡住
- 15. sql根据百分比分配值
- 16. 哪种类型,以节省百分比
- 17. 熊猫GROUPBY:百分比高于阈值
- 18. 只允许0 - 100作为百分比值的表单类型
- 19. 在MySQL中插入TIME类型值的百分比
- 20. 缺少PercentRelativeLayout百分比值的XML资源类型?
- 21. 比例百分比数据的平均值为50%
- 22. 适用于存储ISOYearMonth的Oracle数据类型是什么?
- 23. 按价值或价值百分比计算百分比
- 24. jQuery/CSS栏百分比不适用于rails应用程序
- 25. 计算两个数字之间保存的百分比?
- 26. 格式化百分比值的小数?
- 27. MVC C#应用程序,文本框%比百分之数据库保存
- 28. 百分比宽度不适用于3列
- 29. Hive的适当数据类型适用于UDF的DATE和TIMESTAMP
- 30. 用于存储URL的数据类型
也发现了这个相关的职位:http://stackoverflow.com/questions/1602318/what-should-be-the -best-way-store-a-percent-value-in-sql-server – User 2010-05-16 21:20:48