パーセントを表す値をSQLサーバーに保存したいのですが、どのデータ型を優先する必要がありますか?
decimal(p、s)およびnumeric(p、s)
p(精度):
格納される10進数の最大合計数(小数点の左右両方)
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)
ケースの99.9%で decimal(p、s) を使用する必要があります。
パーセントはプレゼンテーションの概念にすぎません。10%は依然として0.1です。
実数として表現される場合、最も高い期待値/望ましい小数点以下の桁数の精度とスケールを選択するだけです。値<100%に対してp = sを設定し、小数点以下の桁数に基づいて単純に決定できます。
ただし、100%または1を保存する必要がある場合は、p = s + 1が必要です。
これにより、最大9.xxxxxxまたは9xx.xxxx%が許可されるため、必要に応じて最大1を維持するためにチェック制約を追加します。
このタイプの番号を保存する場所はDECIMALです。しかし、決定を容易にするために、100の割合ではなく1の割合で保存します。このようにして、「全体」の数に関係なく、必要な小数点以下の桁数を正確に保存できます。したがって、小数点以下6桁が必要な場合はDECIMAL(9、8)を使用し、23.3436435%の場合は0.23346435を格納します。 23.346435%に変更すると、ストレージの問題ではなく、ディスプレイの問題になります。また、ほとんどのプレゼンテーション言語/レポートライターなどは、ディスプレイを変更できます。
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)を使用します。
等々
列のデータ型は10進数でなければなりません。