精度是數(shù)中的數(shù)字個(gè)數(shù)。小數(shù)位數(shù)是數(shù)中小數(shù)點(diǎn)右邊的數(shù)字個(gè)數(shù)。例如,數(shù) 123.45 的精度是 5,小數(shù)位數(shù)是2。
numeric 和 decimal 數(shù)據(jù)類型默認(rèn)的最大精度是 38。在 SQL Server 早期版本中,默認(rèn)的最大值是 28。
數(shù)字?jǐn)?shù)據(jù)類型的長(zhǎng)度是存儲(chǔ)此數(shù)所占用的字節(jié)數(shù)。字符串或 Unicode 數(shù)據(jù)類型的長(zhǎng)度是字符個(gè)數(shù)。binary、varbinary、和 image 數(shù)據(jù)類型的長(zhǎng)度是字節(jié)數(shù)。例如,int 數(shù)據(jù)類型可以有 10 位數(shù),用 4 個(gè)字節(jié)存儲(chǔ),不接受小數(shù)點(diǎn)。int 數(shù)據(jù)類型的精度是 10,長(zhǎng)度是 4,小數(shù)位數(shù)是 0。
當(dāng)兩個(gè) char、varchar、binary 或 varbinary 表達(dá)式串聯(lián)時(shí),結(jié)果表達(dá)式的長(zhǎng)度是這兩個(gè)源表達(dá)式長(zhǎng)度之和,或是 8,000 字符,以二者中少者計(jì)。
當(dāng)兩個(gè) nchar 或 nvarchar 表達(dá)式串聯(lián)時(shí),結(jié)果表達(dá)式的長(zhǎng)度是兩個(gè)源表達(dá)式長(zhǎng)度之和,或是 4,000 字符,以二者中少者計(jì)。
除了 decimal 類型之外,數(shù)字?jǐn)?shù)據(jù)類型的精度和小數(shù)位數(shù)是固定的。如果算術(shù)運(yùn)算符有兩個(gè)相同類型的表達(dá)式,結(jié)果就為該數(shù)據(jù)類型,并且有對(duì)此類型定義的精度和小數(shù)位數(shù)。如果運(yùn)算符有兩個(gè)不同數(shù)字?jǐn)?shù)據(jù)類型的表達(dá)式,數(shù)據(jù)類型優(yōu)先規(guī)則決定結(jié)果的數(shù)據(jù)類型。結(jié)果為該數(shù)據(jù)類型定義的精度和小數(shù)位數(shù)。
下表定義了當(dāng)運(yùn)算的結(jié)果是 decimal 類型時(shí),結(jié)果的精度和小數(shù)位數(shù)是如何計(jì)算的。當(dāng)以下情況時(shí),結(jié)果是 decimal 類型:
操作數(shù)表達(dá)式由表達(dá)式 e1(精度為 p1,小數(shù)位數(shù)為 s1)和表達(dá)式 e2(精度為 p2,小數(shù)位數(shù)為 s2)來(lái)表示。非 decimal 類型的表達(dá)式的精度和小數(shù)位數(shù),是對(duì)此表達(dá)式數(shù)據(jù)類型定義的精度和小數(shù)位數(shù)。
操作 | 結(jié)果精度 | 結(jié)果小數(shù)位數(shù) * |
---|---|---|
e1 + e2 | max(s1, s2) + max(p1-s1, p2-s2) + 1 | max(s1, s2) |
e1 - e2 | max(s1, s2) + max(p1-s1, p2-s2) | 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) |
* 結(jié)果精度和小數(shù)位數(shù)有絕對(duì)最大值 38。當(dāng)結(jié)果精度大于 38 時(shí),相應(yīng)的小數(shù)位數(shù)會(huì)減少,以避免結(jié)果的整數(shù)部分被截?cái)唷?/P>