oracle數字型別的儲存格式

2021-05-23 10:11:26 字數 2014 閱讀 6686

oracle在資料庫內部通過相應的演算法轉換來進行資料儲存,本文簡單介紹oracle的number型數值儲存及轉換. 我們可以通過dump函式來轉換數字的儲存形式,乙個簡單的輸出類似如下格式: sql> select dump(1) from dual; dump(1) ------------------ typ=2 len=2: 193,2 dump函式的輸出格式類似: 型別 <[長度]>,符號/指數字 [數字1,數字2,數字3,......,數字20] 各位的含義如下: 1.型別: number型,type=2 (型別**可以從oracle的文件上查到) 2.長度:指儲存的位元組數 3.符號/指數字 在儲存上,oracle對正數和負數分別進行儲存轉換: 正數:加1儲存(為了避免null) 負數:被101減,如果總長度小於21個位元組,最後加乙個102(是為了排序的需要) 指數字換算: 正數:指數=符號/指數字 - 193 (最高位為1是代表正數) 負數:指數=62 - 第一位元組 4.從

《數字1>

開始是有效的資料位 從

《數字1>

開始是最高有效位,所儲存的數值計算方法為: 將下面計算的結果加起來: 每個

《數字位》

乘以100^(指數-n) (n是有效位數的順序位,第乙個有效位的n=0) 5. 舉例說明 sql> select dump(123456.789) from dual; dump(123456.789) ------------------------------- typ=2 len=6: 195,13,35,57,79,91

《指數》

: 195 - 193 = 2

《數字1>

13 - 1 = 12 *100^(2-0) 120000

《數字2>

35 - 1 = 34 *100^(2-1) 3400

《數字3>

57 - 1 = 56 *100^(2-2) 56

《數字4>

79 - 1 = 78 *100^(2-3) .78

《數字5>

91 - 1 = 90 *100^(2-4) .009   123456.789 sql> select dump(-123456.789) from dual; dump(-123456.789) ---------------------------------- typ=2 len=7: 60,89,67,45,23,11,102

《指數》

62 - 60 = 2(最高位是0,代表為負數)

《數字1>

101 - 89 = 12 *100^(2-0) 120000

《數字2>

101 - 67 = 34 *100^(2-1) 3400

《數字3>

101 - 45 = 56 *100^(2-2) 56

《數字4>

101 - 23 = 78 *100^(2-3) .78

《數字5>

101 - 11 = 90 *100^(2-4) .009   123456.789(-) 現在再考慮一下為什麼在最後加102是為了排序的需要,-123456.789在資料庫中實際儲存為 60,89,67,45,23,11 而-123456.78901在資料庫中實際儲存為 60,89,67,45,23,11,91 可見,如果不在最後加上102,在排序時會出現-123456.789<-123456.78901的情況。 對於2119號提問,第乙個問題是: 1.請問為什麼193,2各代表什麼意思? 從上面就可以看到答案了. 2.還有number數字型別為什麼有2個位元組的長度呢? 對於這個問題,我想我們應該知道,所有資料型別最終在計算機裡都以二進位制儲存,實際上所謂的資料型別都是我們定義的.所以儲存只由演算法決定. 所以這個問題是不成立的.比如: sql> select dump(110) from dual; dump(110) --------------------- typ=2 len=3: 194,2,11 sql> select dump(1100) from dual; dump(1100) ------------------- typ=2 len=2: 194,12 我們會看到,雖然1100>110,但是儲存上1100卻只佔2位元組,而110卻佔了3個位元組.

Oracle 格式化數字

start 所謂格式化數字指的是將數字轉為字串,或將字串轉為數字,下面幾個函式可以用來格式化數字。to char number,format to number character format to binary float character format to binary double ch...

MySQL 數字型別,儲存大小

整數 tinyint smallint mediumint int bigint 浮點數 float double real decimal type storage minumun value maximum value bytes signed unsigned signed unsigned ...

ORACLE格式化數字的方法

to char,函式功能,就是將數值型或者日期型轉化為字元型。比如最簡單的應用 1.0123 1.0123 select to char 1.0123 from dual 123 123 select to char 123 from dual 接下來再看看下面 0.123 123 selec to...