本节介绍用来检查和处理二进制字符串(即类型为 bytea
的值)的函数和运算符。很多函数和运算符在目的和语法上与上一节描述的文本字符串函数和运算符等效。
SQL定义了一些字符串函数,这些函数使用关键词(而不是逗号)来分隔参数。详情请参见表 9.11。PostgreSQL 还提供了这些函数的版本,这些版本使用常规函数调用语法(参见表 9.12)。
表 9.11. SQL二进制字符串函数和运算符
其他二进制字符串操作函数也已提供,且列在 表 9.12 中。表中部分函数在内部用于实现SQL- 表 9.11 中列出的标准字符串函数。
表 9.12 其他二进制字符串函数
函数 描述 示例 |
---|
返回二进制字符串中已设置的位数(又称为 “计数位”)。
|
从二进制字符串中提取第 n 个 位。
|
从二进制字符串中提取第 n 个 字节。
|
返回二进制字符串中的字节数。
|
假设二进制字符串在给定
|
计算 binary string 的 MD5 哈希,结果以十六进制形式输出。
|
将二进制字符串中 第 n 位 bit 设置为
|
将二进制字符串中 第 n 位 byte 设置为
|
计算 binary string 的 SHA-224 哈希。
|
计算 binary string 的 SHA-256 哈希。
|
计算 binary string 的 SHA-384 哈希。
|
计算 binary string 的 SHA-512 哈希。
|
从
|
函数 get_byte
和 set_byte
将二进制字符串的第一个字节编号为 0。函数 get_bit
和 set_bit
将每个字节内的比特从右往左进行编号;例如,比特 0 是第一个字节的最低有效比特,比特 15 是第二个字节的最高有效比特。
出于历史原因,函数 md5
返回类型为 text
的经过 16 进制编码的值,而 SHA-2 函数返回类型为 bytea
的值。使用函数 encode
和 decode
在两者之间进行转换。例如,编写 encode(sha256('abc'), 'hex')
以获取经过 16 进制编码的文本表示形式,或 decode(md5('abc'), 'hex')
以获取 bytea
值。
在不同字符集(编码)之间转换字符串的函数以及以文本形式表示任意二进制数据的函数,显示在 表 9.13 中。对于这些函数,类型为 text
的参数或结果使用数据库的默认编码表示,而类型为 bytea
的参数或结果使用由另一个参数命名的编码表示。
表 9.13。文本/二进制字符串转换函数
函数 描述 示例 |
---|
将编码为
|
将以编码
|
将
|
将二进制数据编码为文本表示形式;受支持的
|
从文本表示形式解码二进制数据;受支持的
|
encode
和 decode
函数支持以下文本格式
base64
格式为 RFC 2045 第 6.8 节 的格式。按照RFC,编码行以 76 个字符为分割。但是,仅仅换行符用于换行,而不是 MIME CRLF 换行符标记。当 decode
函数提供无效的 base64 数据(包括不正确的尾部填充)时,此函数将忽略回车、换行符、空格和制表符。否则会引发错误。
escape
格式将零字节和高位字节转换为八进制转义序列 (\
nnn
),并将反斜杠加倍。其他字节值被直表示。如果反斜杠后面没有跟随第二个反斜杠或三个八进制数字,decode
函数会引发错误;它接受其他字节值不作更改。
hex
格式将每 4 位数据表示为一个十六进制数字,从 0
到 f
,先写入每个字节的高位数字。 encode
函数小写输出 a
-f
十六进制数字。由于数据最小单位为 8 位,encode
总是返回偶数个字符。 decode
函数接受大写或小写的 a
-f
字符。当 decode
接收无效十六进制数据时(包括接收奇数个字符),它会引发错误。