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