VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

FROM_BASE64

功能描述

根据BASE64编码规则,将一个BASE64编码的字符串解码,返回字符串的解码结果。

返回值类型:text

编码规则

  • 将输入的每三个字节(24位)变成四个字节(32位):6位为一组,高位补两个0,组成一个字节,这样正好能将三个字节补成四个字节,其中每个字节只会对应0(00000000)到63(00111111)。

  • 每76个字符加一个换行符。

  • 编码0(00000000)到61(00111111)对应A-Z,a-z,0-9共62个字符,62(00111110)的编码是+,63(00111111)的编码是/

  • 若输入的字符串字节数不为三的倍数,那么剩余的字节根据编码规则转换,若有一个字节不满8位,则在低位补0补满8位,同时用“=”将转换结果补满四个字节。若最后一组只有两个字节,每6位一组,第三组只有4位,低位要补两个0,然后这三组再分别高位补两个0,转成三个字符,末尾补一个“=”;若最后一组只有一个字节,每6位一组,第二组只有2位,低位要补四个0,然后这两组再分别高位补两个0,转成两个字符,末尾补两个“=”。

解码规则

  • 将输入的字符串用二进制表示,去掉每个字节高位的两个0。

  • 根据编码规则,正确的编码字节数必为4的倍数。若末尾有“=”,则根据“=”数量去掉最后一个除“=”以外的字节低位的0。若末尾有一个“=”,即最后四个字节为***=,则将前三个字节转二进制后再去掉最后两个0,若末尾有两个“=”,即最后四个字节为**==,则将前两个字节转二进制后再去掉最后四个0。

  • 将去掉高位0后的各个字节按顺序拼接,每8位转成一个字符。

注意事项

如果输入的是NULL,那么返回的结果为NULL。

语法格式

FROM_BASE64(str)

参数说明

str

待解码的任意长度字符串。

示例

示例1: 'YWJj'

SELECT FROM_BASE64('YWJj');

返回结果为:

 from_base64
-------------
 abc
(1 row)

解码过程分析

1、字符串用二进制表示为:00011000(Y)00010110(W)00001001(J)00100011(j)

2、去掉每个字节高位的两个0后变成:011000 010110 001001 100011

3、将去掉高位0后的各个字节按顺序拼接成:01100001(a)01100010(b)01100011(c)

4、故解码结果为abc。

示例2: 'YWI='

SELECT FROM_BASE64('YWI=');

返回结果为:

 from_base64
-------------
 ab
(1 row)

解码过程分析

1、字符串用二进制表示为:00011000(Y)00010110(W)00001000(I)

2、去掉每个字节高位的两个0后变成:011000 010110 001000

3、由于末尾有一个“=”,则第三个字节末尾的0也要去掉再拼接:01100001 01100010

4、故解码结果为ab。

参考链接

TO_BASE64