有効桁数、小数点以下桁数、および長さ (Transact-SQL)

有効桁数は、数値全体の桁数です。 小数点以下桁数は、数値の中で小数点より右側の桁数です。 たとえば、123.45 という値の場合、有効桁数は 5 で、小数点以下桁数は 2 になります。

SQL Server では、numeric 型と decimal 型の有効桁数の既定の最大値は 38 桁です。 以前のバージョンの SQL Server では、既定の最大値は 28 桁です。

数値型の長さは、数値の格納に使用されるバイト数です。 文字型や Unicode 型の長さは、文字数です。 binary 型、varbinary 型、および image 型の長さは、バイト数です。 たとえば、ある int 型は 10 桁を保持でき、4 バイトに格納され、小数点が許可されないとします。 この場合、int 型の有効桁数は 10、長さは 4、小数点以下桁数は 0 になります。

char 型、varchar 型、binary 型、または varbinary 型の式が 2 つ連結された場合に得られる式の長さは、基になる 2 つの式の長さを加えた値または 8,000 文字の、いずれか小さい方の値になります。

nchar 型または nvarchar 型の式が 2 つ連結された場合に得られる式の長さは、基になる 2 つの式の長さを加えた値または 4,000 文字の、いずれか小さい方の値になります。

同じデータ型で長さが異なる 2 つの式が、UNION、EXCEPT、または INTERSECT を使って比較される場合、結果の長さは 2 つの列の最大長になります。

decimal 型を除く数値型の有効桁数と小数点以下桁数は固定です。 同じデータ型の 2 つの式に算術演算子を使用する場合、得られる結果のデータ型は同じになり、そのデータ型に定義されている有効桁数と小数点以下桁数が適用されます。 異なるデータ型の 2 つの式に演算子を使用する場合、結果のデータ型はデータ型の優先順位規則によって決まります。 結果には、そのデータ型に定義されている有効桁数と小数点以下桁数が適用されます。

次の表は、演算の結果が decimal 型のときの、結果の有効桁数と小数点以下桁数の計算方法です。 次のいずれかが true の場合、結果は decimal 型になります。

  • 両方の式が decimal 型の場合

  • 一方の式が decimal 型で、もう一方の式のデータ型が decimal 型よりも低い優先順位の場合。

オペランド式は、有効桁数 p1 および小数点以下桁数 s1 の式 e1 と、有効桁数 p2 および小数点以下桁数 s2 の式 e2 で表されます。 decimal 型でない式の有効桁数と小数点以下桁数は、その式のデータ型に定義されている有効桁数と小数点以下桁数になります。

演算

結果の有効桁数

結果の小数点以下桁数 *

e1 + e2

max(s1, s2) + max(p1-s1, p2-s2) + 1

max(s1, s2)

e1 - e2

max(s1, s2) + max(p1-s1, p2-s2) + 1

max(s1, s2)

e1 * e2

p1 + p2 + 1

s1 + s2

e1 / e2

p1 - s1 + s2 + max(6, s1 + p2 + 1)

max(6, s1 + p2 + 1)

e1 { UNION | EXCEPT | INTERSECT } e2

max(s1, s2) + max(p1-s1, p2-s2)

max(s1, s2)

e1 % e2

min(p1-s1, p2 -s2) + max( s1,s2 )

max(s1, s2)

* 結果の有効桁数と小数点以下桁数の絶対最大値は 38 です。 結果の有効桁数が 38 を超える場合、結果の整数部分が切り捨てられないように、対応する小数点以下桁数が減らされます。

関連項目

参照

式 (Transact-SQL)

データ型 (Transact-SQL)