有効桁数、小数点以下桁数、および長さ (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 を超える場合、結果の整数部分が切り捨てられないように、対応する小数点以下桁数が減らされます。