搜索
写经验 领红包
 > 生活

教你如何进行数仓字符串二进制十六进制互转操作(数字转二进制字符串)

导语:教你如何进行数仓字符串、二进制、十六进制互转

教你如何进行数仓字符串,二进制,十六进制互转操作(数字转二进制字符串)

本文分享自华为云社区《GaussDB(DWS)字符串、二进制、十六进制互转-云社区-华为云》,作者:你是猴子请来的救兵吗 。

概述

现网中遇到很多小伙伴不清楚字符串与进制之间的转换方法,其实在GaussDB(DWS)中,进制转换是非常方便的。这次就来对不同的场景一一进行解析,整理出来供大家翻阅参考。

字符串&二进制 互转
39;华为&39;华为&39;华为& 二进制转字符串,使用convert_from,第二个参数为编码select convert_from(&39;::bytea,&39;); convert_from-------------- 华为(1 row)
二进制&十六进制 互转
39;\xe58d8ee4b8ba&39;hex& 十六进制转二进制,820版本可以使用unhex,低于820版本可以使用decodeselect unhex(&39;::text);     unhex---------------- \xe58d8ee4b8ba(1 row)select decode(&39;::text,&39;);     decode---------------- \xe58d8ee4b8ba(1 row)
字符串&十六进制 互转
39;华为&39;华为&39;hex& 十六进制转字符串,需先将十六进制转换为二进制,再转为字符串select convert_from(unhex(&39;),&39;); convert_from-------------- 华为(1 row)
注意事项:

1,hex/unhex是820版本新增的一组十六进制的编码/解码函数,低于820版本需使用encode/decode函数替代。

hex行为与mysql数据库保持一致,输出全大写的十六进制字符串;encode输出的是全小写的十六进制字符串;对大小写有要求的小伙伴可以选择满足要求的函数,但实际在解析时是没有影响的。

select hex(&39;::text);     hex-------------- E58D8EE4B8BA(1 row)select encode(&39;::text::bytea, &39;);    encode-------------- e58d8ee4b8ba(1 row)

2,在将二进制转为字符串的时候使用convert_from,第二个参数为源数据编码。

需要注意的是,一定保证源数据编码正确,否则就会产生非预期的结果,甚至报错。

像这样

39;E58D8EE4B8BA&39;gbk& 源数据编码为gbk,但解析时错误指定为utf8select convert_from(unhex(&39;),&39;);ERROR:  invalid byte sequence for encoding &34;: 0xbbCONTEXT:  referenced column: convert_from
知识小结

转换函数encode

encode(data bytea, format text)描述:将二进制数据编码为文本数据。返回值类型:textSELECT encode(&39;, &39;);  encode  ---------- ZGF0YWJhc2U=(1 row)decode(string text, format text)描述:将二进制数据从文本数据中解码。返回值类型:byteaSELECT decode(&39;, &39;);    decode    -------------- \x6461746162617365(1 row)

转换函数convert_from

convert_from(string bytea, src_encoding name)描述:以数据库的编码方式转化字符串bytea。src_encoding指定源编码方式,在该编码下,string必须是合法的。返回值类型:textSELECT convert_from(&39;,&39;); convert_from-------------- database(1 row)

转换函数hex/unhex,需820或以上版本

hex(n)描述:n可以是int类型也可以是字符串。返回n的十六进制字符串。若参数含有NULL值,返回NULL。返回值类型:textSELECT hex(&39;) as result; result-------- 616263(1 row)unhex(n)描述:执行hex(n)的反向操作,n可以是int类型也可以是字符串,将参数中的每一对十六进制数字理解为一个数字,并将其转化为该数字代表的字符。若参数含有NULL值,返回NULL。返回值类型:byteaSELECT unhex(&39;) as result;  result---------- \x616263(1 row)

点击下方,第一时间了解华为云新鲜技术~

华为云博客_大数据博客_AI博客_云计算博客_开发者中心-华为云

本文内容由小嫣整理编辑!