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


272

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

decimal(18, 0)列のデータ型に割り当てましたが、これによりこれらの値を保存できません。

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

回答:


513

DECIMAL(18,0) 小数点以下は0桁になります。

DECIMAL(18,4)その代わりにうまくいくようなものを使用してください!

これにより、合計で18桁の数字が得られます。そのうちの 4 は小数点の後(そして14桁は小数点の前)になります。


@marc_s、とにかく列のデータ型がdecimal(4,2)である値「4.5」を格納することはありますか?値を挿入すると、値は「4.50」に変更されます
Arun

1
@ArunkumarTK:decimal(4,2)小数点の前と後の2桁を許可します。「4.5」は問題なく格納できます-数値的には、「4.5」と「4.50」は同じです
marc_s

3
@ArunkumarTK:なぜそれらを異なるものにするべきなのですか?どちらも、「4年半」です-値は同じです .AND NO使用していないvarchar小数点値を格納するために!
marc_s 2015

1
私はこれが古い議論であることを知っていますが、その場合@ArunkumarTKの場合は「4.05」と「4.5」ではないでしょう。
Shelby115 2015

2
ええ、18と19の両方が9バイトを使用するのに、なぜ18はそれほど人気が​​あるのですか(たとえば、デフォルト(18,0))。
xr280xr 2017

136

次のように使用する必要があります。

DECIMAL(m,a)

m 10進数の桁数です。

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

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


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

リンクは死んでいます
ibrahim mahrir

43

の設定Decimalは、その精度とスケール、または通常の言語での数値、桁数、小数点の右側の桁数です。

あなたは置けばそうPIDecimal(18,0)、それは次のように記録されますか3

あなたが入れた場合PIDecimal(18,2)、それは次のように記録されますか3.14

入れPIDecimal(18,10)場合はとして記録され3.1415926535ます。


35

ほとんどの場合、SQLの10進数型でストレージ(5バイト)が最も少ないdecimal(9,2)を使用します。


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

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

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


9

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

decimal(18,1)

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


6

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

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

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


2
質問でMicrosoft SQL Serverが明確に指定されているのに、なぜこれが関連するのですか?
JCKödel

3

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


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)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.