HEXTORAW是在Oracle和DB2 on LUW之類的幾個RDBMS中發現的函數。它需要一個字符或整數輸入,並基本將其轉換爲十六進制值。HEXTORAW()函數是如何工作的?算法是什麼?
HEXTORAW(1234) = x'1234'
這種類型轉換算法是什麼?幕後代碼中發生了什麼?
(這是由那些想創建一個RDBMS此功能不具備HEXTORAW功能的動機。)
HEXTORAW是在Oracle和DB2 on LUW之類的幾個RDBMS中發現的函數。它需要一個字符或整數輸入,並基本將其轉換爲十六進制值。HEXTORAW()函數是如何工作的?算法是什麼?
HEXTORAW(1234) = x'1234'
這種類型轉換算法是什麼?幕後代碼中發生了什麼?
(這是由那些想創建一個RDBMS此功能不具備HEXTORAW功能的動機。)
爲了有一個完整的算法在這裏:
給定的字符串作爲輸入參數
1.Validate該字符串只包含數字1-9或字母A-F。
2.Calculate通過遍歷每個字符, 和連接相應的二進制值的二進制值:
binary hexadecimal
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 a
1011 b
1100 c
1101 d
1110 e
1111 f
例如,將是:
0001 0010 0011 0100
3,採用該值,設置內存位的位。
4.Address它作爲原始數據類型
5.Return其作爲函數的返回值
將所得原始數據類型將具有十六進制表示等同於原始的字符串。
給定輸入'1234',該函數將返回將顯示爲十六進制值x'1234'的原始數據類型。二進制數據通常用十六進制表示,以便於閱讀和引用。
(此基礎上馬克J. Bobak的答案,所以我想給信貸給他,但我也想後一個完整的過程。)
從這個頁面: http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements001.htm#i46018
當甲骨文自動轉換RAW或LONG RAW數據向和從 CHAR數據中,二進制數據以十六進制形式表示,其中 一個十六進制字符表示RAW數據的每四位。 例如,顯示11001011位的一個RAW數據字節,並輸入 作爲CB。
這是一個有益的開端。因此,一旦引擎確定了正確的二進制值,它必須將這些位直接放入內存位置,並將其作爲原始數據類型進行尋址。這看起來準確嗎?與在系統字符集中對該值進行編碼相反,並將其作爲1和0的varchar值返回。這就是BINARY函數在z/OS上的DB2中的作用。 – 2014-08-29 15:21:45
我解釋它的方式,HEXTORAW()函數將採取任意字符串的十六進制字符,將其轉換爲二進制文件並將其作爲二進制文件存儲在RAW數據類型中。 – 2014-08-29 15:33:13