UNHEX
功能描述
UNHEX函数用于将一个十六进制编码的字符串解码。
UNHEX解码规则
一个十六进制字符变成4位二进制,两个十六进制字符(8位)解码为一个字符,返回字符串的解码结果(bytea类型)。若十六进制字符串的字符数不为偶数,则在高位补0。若输入的是二进制格式的字符串,则返回NULL。
例如:4142
1、将每个十六进制字符用4位二进制表示,若十六进制字符数不为偶数,则在高位补0:0100(4)0001(1)0100(4)0010(2)。
2、每8位组成一个字符:01000001 01000010。
SELECT UNHEX('4142');
返回结果如下:
unhex
--------
\x4142
(1 row)
HEX函数用于得到输入数据的十六进制表现形式,UNHEX函数可将HEX函数的转换结果还原为其原始数据。
注意事项
- 该功能仅在数据库兼容模式为MySQL时支持(即数据库实例初始化时指定DBCOMPATIBILITY='B')。
- 如果输入的是NULL或者包含非十六进制字符,那么返回的结果为NULL。
- 若输入的是数字,则将数字转成字符串后进行解码,如需将十六进制数转为十进制数,则需要使用其它的函数。
语法格式
UNHEX(bytea | boolean | text | bit)
参数说明
bytea | boolean | text | bit
输入的待转换数据,支持的数据类型为:bytea、boolean、text、bit。
示例
示例1: 直接调用UNHEX函数。
1、使用HEX函数将字符串转换为十六进制表现形式。
SELECT HEX('1234abc&');
返回结果为:
hex
------------------
3132333461626326
(1 row)
2、使用上一步转换得到的结果作为UNHEX函数的入参,得到转换前的原始数据。
SELECT UNHEX('3132333461626326');
返回结果为:
UNHEX('3132333461626326')
---------------------------
\x3132333461626326
(1 row)
上述语句等效于:
SELECT UNHEX(HEX('1234abc&'));
示例2: 调用unhex函数(其入参为表值)。
1、创建测试表并插入数据。
CREATE TABLE test_1169944 (c1 bytea);
INSERT INTO test_1169944 VALUES('qwert');
INSERT INTO test_1169944 VALUES('7177657274');
2、使用HEX函数将c1转换为十六进制表现形式。
SELECT HEX(c1) FROM test_1169944 WHERE c1='qwert';
返回结果为:
HEX(c1)
------------
7177657274
(1 row)
3、调用UNHEX函数。
SELECT UNHEX(c1) FROM test_1169944 WHERE c1='7177657274';
SELECT UNHEX(HEX(c1)) FROM test_1169944 WHERE c1='qwert';
返回结果为:
UNHEX(c1)
-----------
(1 row)
UNHEX(HEX(c1))
----------------
\x7177657274
(1 row)
清理环境
DROP TABLE test_1169944;