web-dev-qa-db-ja.com

SQL-Serverにパーセント値を保存する最良の方法は何でしょうか?

パーセントを表す値をSQLサーバーに保存したいのですが、どのデータ型を優先する必要がありますか?

62
Shimmy

decimal(p、s)およびnumeric(p、s)

p(精度):

格納される10進数の最大合計数(小数点の左右両方)


s(スケール):

小数点の右側に格納される小数点以下の桁数(-> sは小数点以下の桁数を定義します)


0 <= s <= p。

  • p ...総桁数
  • s ...小数点の右側の桁数
  • p-s ...小数点の左側の桁数

例:

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

37
Guti_Haz

ケースの99.9%で decimal(p、s) を使用する必要があります。

パーセントはプレゼンテーションの概念にすぎません。10%は依然として0.1です。

実数として表現される場合、最も高い期待値/望ましい小数点以下の桁数の精度とスケールを選択するだけです。値<100%に対してp = sを設定し、小数点以下の桁数に基づいて単純に決定できます。

ただし、100%または1を保存する必要がある場合は、p = s + 1が必要です。

これにより、最大9.xxxxxxまたは9xx.xxxx%が許可されるため、必要に応じて最大1を維持するためにチェック制約を追加します。

62
gbn

このタイプの番号を保存する場所はDECIMALです。しかし、決定を容易にするために、100の割合ではなく1の割合で保存します。このようにして、「全体」の数に関係なく、必要な小数点以下の桁数を正確に保存できます。したがって、小数点以下6桁が必要な場合はDECIMAL(9、8)を使用し、23.3436435%の場合は0.23346435を格納します。 23.346435%に変更すると、ストレージの問題ではなく、ディスプレイの問題になります。また、ほとんどのプレゼンテーション言語/レポートライターなどは、ディスプレイを変更できます。

12
Aaron Bertrand

decimal(p、s) を使用する必要がありますが、sはパーセント機能を表します。ポイントの左側の各数字は1パーセントであるため、1バイト以上を必要としないため、「p」は1でもかまいません。したがって、pは少なくともs + 1でなければなりません。 1000%まで保存します。ただし、SQLでは 'p'をsより小さくすることはできません。

例:28.2656579879%はdecimal(13、12)であり、00.282656579879 128.2656579879%はdecimal(13、12)であり、01.282656579879である必要があります

0.28のように28%をdecimal(3,2)に格納する必要があります128%は1.28のようにdecimal(3,2)に格納する必要があります

注:100%に達しないことがわかっている場合(つまり、値は常にdecimal(s、s)を使用するよりも100%未満になります)、そうである場合はdecimal(s + 1、s)を使用します。

等々

9
Shimmy

列のデータ型は10進数でなければなりません。

4
OMG Ponies