您好,欢迎访问一九零五行业门户网

Oracle中位运算函数试验

rawtohex表示将raw类型数据转换为16进制字符串(nvarchar类型,typ=1),hextoraw表示将16进制字符串转换为raw类型。注意:hextora
1.rawtohex,hextoraw
rawtohex表示将raw类型数据转换为16进制字符串(nvarchar类型,typ=1),hextoraw表示将16进制字符串转换为raw类型。
注意:hextoraw的参数如果是字符串,会当作16进制数字对待;如果是数字,也会认为是16进制而不是10进制;
sql> select hextoraw('13'),hextoraw(13),hextoraw('d') from dual;
hextoraw('13') hextoraw(13) hextoraw('d')
-------------- ------------ -------------
13            13          0d
以上前两列返回结果是相同的(十六进制13即十进制19的字符串表示形式);
第三列返回'0d'是因为这样才是一个完整字节;
实际上hextoraw返回的值总是偶数位的,每两位表示一个字节;
dump一下可以证明(typ=23表示raw类型):
sql> select dump(hextoraw('13')),dump(hextoraw(13)),dump(hextoraw('d')) from dual;
dump(hextoraw('13')) dump(hextoraw(13)) dump(hextoraw('d'))
-------------------- ------------------ -------------------
typ=23 len=1: 19    typ=23 len=1: 19  typ=23 len=1: 13
注意以下例子:
sql> select to_number('ab','xx') from dual;
to_number('ab','xx')
--------------------
                171
sql> select hextoraw('ab') from dual;
hextoraw('ab')
--------------
ab
sql> select hextoraw(to_number('ab','xx')) from dual;
hextoraw(to_number('ab','xx'))
----------------------------------------
0171
虽然to_number('ab','xx')是将十六进制字符串'ab'转换为10进制数171,但是作为hextoraw参数时又被认为是16进制数了
2。utl_raw.bit_and,bitand
bitand的参数是十进制数字,将输入参数转化为二进制后求与,返回值是数值型;
sql> select bitand(10,25) from dual;
bitand(10,25)
-------------
            8
sql> select dump(bitand(10,25)) from dual;
dump(bitand(10,25))
-------------------
typ=2 len=2: 193,9
10=1100b,25=11001b,按位与结果是01000b=8(typ=2表示number类型)
utl_raw.bit_and的参数和返回值都是raw类型,,
sql> select utl_raw.bit_and(hextoraw('a'),hextoraw('19')) from dual;
utl_raw.bit_and(hextoraw('a'),
--------------------------------------------------------------------------------
08
sql> select dump(utl_raw.bit_and(hextoraw('a'),hextoraw('19'))) from dual;
dump(utl_raw.bit_and(hextoraw(
--------------------------------------------------------------------------------
typ=23 len=1: 8
其它类似信息

推荐信息