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