簡體   English   中英

在SQL-Server中存儲百分比值的最佳方法是什么?

[英]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。

  • 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

我同意,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM