![](/img/trans.png)
[英]What is the best way to store historical data in SQL Server 2005/2008?
[英]What should be the best way to store a percent value in SQL-Server?
我想存儲一個表示SQL Server中百分比的值,應該選擇哪種數據類型?
您應該在99.9%的情況下使用小數(p,s) 。
百分比只是一個表達概念:10%仍然是0.1。
當表示為實數時,只需選擇最高預期值/所需小數位的精度和比例。 對於值<100%,您可以使用p = s,並根據小數位數進行簡單決定。
但是,如果您確實需要存儲100%或1,那么您將需要p = s + 1。
這允許最多9.xxxxxx或9xx.xxxx%,所以我添加一個檢查約束,以保持最大值1,如果這是我需要的全部。
十進制(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)
我同意,DECIMAL是您應該存儲此類號碼的地方。 但是為了使決策更容易,將其存儲為1的百分比,而不是100的百分比。這樣,無論“整數”如何,您都可以精確存儲所需的小數位數。 因此,如果您想要6個小數位,請使用DECIMAL(9,8)和23.3436435%,存儲0.23346435。 將其更改為23.346435%是顯示問題,而不是存儲問題,並且大多數演示語言/報表編寫者等都能夠為您更改顯示。
我認為應該使用decimal(p,s),而s代表百分比能力。 'p'可以是1,因為我們永遠不需要超過一個字節,因為該點左側的每個數字都是一個百分比,所以p必須至少為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%(即你的值總是小於100%而不是使用小數(s,s),如果是,則使用小數(s + 1,s)。
等等
列的數據類型應為十進制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.