SQL SERVER 數(shù)值類型的存儲(chǔ)格式及轉(zhuǎn)換
一. 整數(shù)
整數(shù)類型有四種:BigInt、Int、SmallInt和Tinyint,分別占用空間為8、4、2、1個(gè)字節(jié)。整數(shù)類型的存儲(chǔ)格式比較簡單:數(shù)據(jù)的補(bǔ)碼形式。這個(gè)大家比較熟悉。
二. Decimal/Numeric
這兩個(gè)數(shù)據(jù)類型定義格式:decimal[(p[, s])] 和 numeric[(p[, s])]
p(精度)
指定小數(shù)點(diǎn)左邊和右邊可以存儲(chǔ)的十進(jìn)制數(shù)字的最大個(gè)數(shù)。精度必須是從 1 到最大精度之間的值。最大精度為38。
s(小數(shù)位數(shù))
指定小數(shù)點(diǎn)右邊可以存儲(chǔ)的十進(jìn)制數(shù)字的最大個(gè)數(shù)。小數(shù)位數(shù)必須是從 0 到 p 之間的值。默認(rèn)小數(shù)位數(shù)是 0,因而 0 <= s <= p。最大存儲(chǔ)大小基于精度而變化。
精度與存儲(chǔ)字節(jié)之間的關(guān)系:
那么SQL SERVER是如何存儲(chǔ)Decimal/Numeric數(shù)據(jù)的呢?
首先右移小數(shù)點(diǎn)s位(不管小數(shù)點(diǎn)后面是否為0),使得數(shù)據(jù)成為整數(shù)(這是該類型數(shù)據(jù)成為精確類型的基礎(chǔ))。SQL SERVER對(duì)結(jié)果值專門使用一個(gè)字節(jié)記錄正負(fù):0x00表示負(fù);0x01表示正。結(jié)果的絕對(duì)值(沒有符號(hào)部分)存儲(chǔ)于符號(hào)值其后。
以上部分(符號(hào)位和結(jié)果值)構(gòu)成了Decimal/Numeric類型數(shù)據(jù)的長度,也就是上表中占用的字節(jié)數(shù)。其實(shí)在SQL SERVER內(nèi)部,另外還得需要3個(gè)字節(jié):1個(gè)字節(jié)記錄精度;1個(gè)字節(jié)記錄小數(shù)位數(shù);另有1字節(jié)為0。
所有最終的存儲(chǔ)格式如下:
三. Money和 Smallmoney
貨幣類型有兩種:Money和SmallMoney,分別占用8個(gè)和4個(gè)字節(jié)。貨幣類型固定有4位的小數(shù)位。
貨幣類型和Decimal/Numeric類型的存儲(chǔ)格式有相似處也有不同處。
相似的地方是:SQL SERVER會(huì)將貨幣類型小數(shù)點(diǎn)右移4位(相當(dāng)于乘以10000),這樣就成整數(shù)了。
不同的地方是,由于貨幣類型的小數(shù)位數(shù)固定為4,所有沒有必要記錄精度值和小數(shù)位數(shù)了。同時(shí)貨幣類型也沒有專門的符號(hào)位,SQL SERVER直接將小數(shù)點(diǎn)右移后的值按補(bǔ)碼存儲(chǔ)。
給貨幣類型賦值時(shí),不需要用單引號(hào) (') 引起來。請(qǐng)務(wù)必記住雖然您可以指定前面帶有貨幣符號(hào)的貨幣值,但 SQL Server 不存儲(chǔ)任何與符號(hào)關(guān)聯(lián)的貨幣信息,它只存儲(chǔ)數(shù)值。
四. 浮點(diǎn)數(shù)Float和real
Float類型定義格式:float [ ( n ) ]。 n 為用于存儲(chǔ)科學(xué)記數(shù)法 float 數(shù)尾數(shù)的位數(shù),同時(shí)指示其精度和存儲(chǔ)大小。n 必須為從 1 到 53 之間的值。
精度與存儲(chǔ)字節(jié)之間的關(guān)系:
在 SQL Server 中,real 的同義詞為 float(24)。
由于浮點(diǎn)數(shù)存儲(chǔ)的數(shù)據(jù)的近似值,所以如果不是要保存特別大的數(shù)據(jù),建議使用精確類型值。浮點(diǎn)數(shù)的存儲(chǔ)格式請(qǐng)看博文 。
五. 使用CONVERT將數(shù)值類型轉(zhuǎn)換為字符型
1. 下表顯示了從 float 或 real 轉(zhuǎn)換為字符數(shù)據(jù)時(shí)的 style 值。
2. 在下表中,左列表示從 money 或 smallmoney 轉(zhuǎn)換為字符數(shù)據(jù)時(shí)的 style 值。
3. 若目的字符串太短,則會(huì)產(chǎn)生下面的錯(cuò)誤:
六. 參考文獻(xiàn)
1. MSDN
發(fā)表于 @ 2010年04月12日 17:40:00 | 評(píng)論( 1) | 編輯| 舉報(bào)| 收藏
聯(lián)系客服