web-dev-qa-db-ja.com

SQL Serverに10進値を格納する方法

私はSQL Serverの列の10進数データ型を把握しようとしています。 15.5、26.9、24.7、9.8などの値を格納できるようにする必要があります。

decimal(18, 0)を列のデータ型に割り当てましたが、これらの値を格納することはできません。

これを行う正しい方法は何ですか?

254
Alex

DECIMAL(18,0)は小数点の後に0桁を許可します。

代わりにDECIMAL(18,4)のようなものを使ってください。

それはあなたに合計18桁を与えます。そのうち4桁は小数点の後(そして小数点の前は14)です。

491
marc_s

あなたが使用する必要があります次のとおりです。

DECIMAL(m,a)

mは、小数点以下の桁数の合計です。

aは、小数点以下の最大桁数です。

http://www.tsqltutorials.com/datatypes.php にすべてのデータ型の説明があります。

123
DForck42

Decimalの設定は、その精度と位取り、あるいは通常の言語では、数字の桁数と小数点以下の桁数です。

それであなたがPIDecimal(18,0)に入れると、それは3として記録されるでしょうか?

PIDecimal(18,2)に入れると、3.14として記録されますか?

PIDecimal(18,10)に入れると、3.1415926535として記録されます。

41
user99638

ほとんどの場合、10進数(9,2)を使用します。これは、SQL 10進数型で最小の記憶領域(5バイト)を使用します。


精度=>格納バイト

  • 1 - 9 => 5
  • 10-19 => 9
  • 20-28 => 13
  • 29〜38 => 17

0から最大9 999 999.99までの範囲で格納できます(前7桁+小数点の後2桁=合計9桁)。これは、ほとんどの値に十分な大きさです。

31

MySQL DBでは、decimal(4,2)は合計4桁の数字しか入力できません。 decimal(4,2)に見られるように、それはあなたが合計の4桁を入力できることを意味します。そのうち2桁は小数点以下を維持するためのものです。

そのため、MySQLデータベースに100.0と入力すると、「列の範囲外の値」のようなエラーが表示されます。

そのため、00.00から99.99の範囲でしか入力できません。

6
Raja Done

あなたはこれを試すことができます

decimal(18,1)

数字の長さは合計18にする必要があります。小数点の後の数字の長さは1だけで、それ以下にする必要があります。

5
Biddut

他の答えは正しいです。あなたの例があなたが望むものの可能性の全範囲を反映すると仮定するとDECIMAL(3, 1)です。または、DECIMAL(14, 1)では合計14桁が許可されます。十分なものについて考えるのはあなたの仕事です。

3
request.input("name", sql.Decimal, 155.33)              // decimal(18, 0)
request.input("name", sql.Decimal(10), 155.33)          // decimal(10, 0)
request.input("name", sql.Decimal(10, 2), 155.33)       // decimal(10, 2)
0
freya