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