2009-05-01 16 views
213

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

decimal(18, 0)私はこれらの値を格納することができません。

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

答えて

421

DECIMAL(18,0)は、小数点以下0桁を許可します。

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

合計で18桁の数字が(小数点以下14桁目と小数点以下14桁目)です。次のようにあなたが使用する必要があります

+171

DECIMAL(18,4)は、小数点の前14桁と小数点以下4桁です。 – Powerlord

+19

右 - 合計18桁、そのうち小数点以下4桁 - 正確に正しい。 –

+0

神様ありがとうございました。大丈夫かもしれません... StackOverflowのための@Jeff Atwoodに感謝します。それが始まって以来、MSDNの空白を埋めることができます(MSDNは非常に良い点です)。 – Coops

93

は次のとおりです。

DECIMAL(m,a) 

mは、あなたの小数を持つことができ、総桁数です。

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

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

+8

Uhm、 'a'は、_maxの小数点_の数ではなく、小数点_の後の_digitsの最大数です(そのうちの1つしかありません)。 –

+0

通常、DECIMAL(p、s)と表示されます.pは精度(数値の最大許容桁数)を表し、sはスケール(小数点以下の最大許容桁数)を表します。 – RBT

2

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

38

Decimalの設定は、精度と位取り、または通常の言語です。数字が何桁あり、何桁が小数点以下の桁数になりますか。

PIDecimal(18,0)に入れると、3と記録されますか?

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

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

6

MySQL DB decimal(4,2)では、合計4桁の数字しか入力できません。 decimal(4,2)に表示されているように、合計4桁の数字を入力できます。そのうち2桁は小数点以下を保持するための数字です。

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

したがって、この範囲に入力できるのは、00.00から99.99までです。

+0

質問がMicrosoft SQL Serverを明確に指定しているときに、これは関連するのはなぜですか? –

25

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


精密=>ストレージバイト

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

0から9 999 999.99まで(7桁のinfront + 2桁の小数点=合計9桁)を格納できます。これはほとんどの値にとって十分です。

-1
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)