本节描述那些检查和操作类型为bytea
的值的函数和操作符。
SQL定义了一些使用关键字而不是逗号来分割参数的串函数。详情请见表 9.11。PostgreSQL也提供了这些函数使用常规函数调用语法的版本(参阅表 9.12)。
本页中显示的示例结果假设服务器参数bytea_output
被设置为escape
(传统PostgreSQL格式)。
表 9.11. SQL二进制串函数和操作符
函数 | 返回类型 | 描述 | 例子 | 结果 |
---|---|---|---|---|
| bytea | 串连接 | '\\Post'::bytea || '047円gres\000円'::bytea | \\Post'gres000円 |
| int | 二进制串中的字节数 | octet_length('jo000円se'::bytea) | 5 |
| bytea | 替换子串 | overlay('Th000円omas'::bytea placing '002円003円'::bytea from 2 for 3) | T\002円\003円mas |
| int | 指定子串的位置 | position('000円om'::bytea in 'Th000円omas'::bytea) | 3 |
| bytea | 提取子串 | substring('Th000円omas'::bytea from 2 for 3) | h000円o |
| bytea |
从string 的开头或结尾删除只包含出现在bytes 中字节的最长串
| trim('000円001円'::bytea from '000円Tom001円'::bytea) | Tom |
还有一些二进制串处理函数可以使用,在表 9.12列出。 其中有一些是在内部使用,用于实现表 9.11列出的 SQL 标准串函数。
表 9.12. 其他二进制串函数
函数 | 返回类型 | 描述 | 例子 | 结果 |
---|---|---|---|---|
| bytea |
从string 的开头或结尾删除只由出现在bytes 中字节组成的最长串
| btrim('000円trim001円'::bytea, '000円001円'::bytea) | trim |
| bytea |
从string 中的文本表示解码二进制数据。format 的参数和在encode 中一样。
| decode('123000456円', 'escape') | 123000456円 |
| text |
将二进制数据编码为一个文本表示。支持的格式有:base64 、hex 、escape 。escape 将零字节和高位组字节转换为八进制序列(\ nnn )和双反斜线。
| encode('123000456円'::bytea, 'escape') | 123000456円 |
| int | 从串中抽取位 | get_bit('Th000円omas'::bytea, 45) | 1 |
| int | 从串中抽取字节 | get_byte('Th000円omas'::bytea, 4) | 109 |
| int | 二进制串的长度 | length('jo000円se'::bytea) | 5 |
| text |
计算string 的MD5哈希码,以十六进制形式返回结果
| md5('Th000円omas'::bytea) | 8ab2d3c9689aaf18b4958c334c82d8b1 |
| bytea | 设置串中的位 | set_bit('Th000円omas'::bytea, 45, 0) | Th000円omAs |
| bytea | 设置串中的字节 | set_byte('Th000円omas'::bytea, 4, 64) | Th000円o@as |
| bytea | SHA-224哈希 | sha224('abc') | \x23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7 |
| bytea | SHA-256哈希 | sha256('abc') | \xba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad |
| bytea | SHA-384哈希 | sha384('abc') | \xcb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7 |
| bytea | SHA-512哈希 | sha512('abc') | \xddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f |
get_byte
和set_byte
把一个二进制串中的一个字节计数为字节 0。get_bit
和set_bit
在每一个字节中从右边起计数位;例如位 0 是第一个字节的最低有效位,而位 15 是第二个字节的最高有效位。
注意由于历史原因,函数md5
返回的是一个十六进制编码的text
值,而SHA-2函数返回类型bytea
。可以使用函数encode
和decode
在两者之间转换,例如encode(sha256('abc'), 'hex')
可以得到一个十六进制编码的文本表示。