9.5. 二进制字符串函数和运算符#
本节介绍用于检查和操作二进制字符串(即类型为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 #
base64
格式为 RFC 2045 第 6.8 节 中的格式。根据 ,编码行在 76 个字符处断开。但是,仅使用换行符作为行尾,而不是 MIME CRLF 行尾标记。decode
函数忽略回车符、换行符、空格符和制表符。否则,当decode
提供无效的 base64 数据(包括尾部填充不正确时)时,会引发错误。- escape #
escape
格式将零字节和高位设置的字节转换为八进制转义序列 (\
nnn
),并将反斜杠加倍。其他字节值将按字面值表示。如果反斜杠后面没有第二个反斜杠或三个八进制数字,decode
函数将引发错误;它接受其他字节值保持不变。- hex #
hex
格式将每 4 位数据表示为一个十六进制数字,0
到f
,先写入每个字节的高阶数字。encode
函数以小写输出a
-f
十六进制数字。由于数据最小单位是 8 位,因此encode
始终返回偶数个字符。decode
函数接受大写或小写的a
-f
字符。当decode
给出无效的十六进制数据(包括给出奇数个字符时),将引发错误。