二进制串函数和操作符
二进制串函数和操作符#
二进制串函数和操作符
本节描述那些检查和操作类型为bytea
的值的函数和操作符。
SQL定义了一些使用关键字而不是逗号来分割参数的串函数。详情请见表。PostgreSQL也提供了这些函数使用常规函数调用语法的版本(参阅表)。
备注
注意
本页中显示的示例结果假设服务器参数bytea_output
被设置为escape
(传统PostgreSQL格式)。
表 SQL二进制串函数和操作符
函数 |
返回类型 |
描述 |
例子 |
结果 |
---|---|---|---|---|
string ||string |
bytea |
串连接 |
‘\Post’::bytea || ‘047gres\000’::bytea |
\Post‘gres000 |
octet_length(string) |
int |
二进制串中的字节数 |
octet_length(‘jo\000se ‘::bytea) |
5 |
overlay(string placing string from int [for int ]) |
bytea |
替换子串 |
overlay(‘Th\00 0omas’::byt ea placing ‘002003’: :bytea from 2 for 3) |
T\002\003mas |
position( substring in string) |
int |
指定子串的位置 |
position(’000om’ ::bytea in ‘Th000omas ‘::bytea) |
3 |
substring(string[from int ] [for int ]) |
bytea |
提取子串 |
substring(‘Th000omas’::bytea from 2 for 3) |
h\000o |
trim( [both] bytes from string) |
bytea |
从 string 的开头 或结尾删除 只包含出现 在 bytes 中字节的最长串 |
trim(’000001’::bytea from ‘ 000Tom001 ‘::bytea) |
Tom |
还有一些二进制串处理函数可以使用,在表列出。 其中有一些是在内部使用,用于实现表列出的 SQL 标准串函数。
表 其他二进制串函数
函数 |
返回类型 |
描述 |
例子 |
结果 |
---|---|---|---|---|
btrim(string bytea , bytes bytea ) |
bytea |
从 string 的开头 或结尾删除 只由出现在bytes 中字节组 成的最长串 |
btrim (’\000trim001’::bytea , ‘000001 ‘::bytea) |
trim |
decode(string text , format text ) |
bytea |
从 st ring 中 的文本表示 解码二进制 数据。format 的参数和在 encode 中一样。 |
decode(‘12 3\000456’, ‘escape’) |
123\000456 |
encode(data bytea , format text ) |
text |
将二进制 数据编码为 一个文本表 示。支持的 格式有:base64 、 hex 、 esc ape 。escape 将零字节和 高位组字节 转换为八进 制序列( n nn )和 双反斜线。 |
encode (‘123\00045 6’::bytea, ‘escape’) |
123\000456 |
get_bit (string , offset) |
int |
从串中抽取位 |
get_bit(‘Th\ 000omas’::bytea, 45) |
1 |
get_byte (string, offset) |
int |
从串中抽取字节 |
get_byte(‘Th \000omas’:: bytea, 4) |
109 |
length (string) |
int |
二进制串的长度 |
length(‘jo000se ‘::bytea) |
5 |
md5 (string) |
text |
计算 stri ng 的MD 5哈希码,以 十六进制形 式返回结果 |
md5(‘Th\000omas ‘::bytea) |
8ab2d3c9689a af18b4958c3 34c82d8b1 |
set_bit (string, offset , newvalue ) |
bytea |
设置串中的位 |
set_bit(‘Th\000 omas’::bytea , 45, 0) |
Th\000omAs |
set_byte (string, offset , newvalue) |
bytea |
设置串中的字节 |
set_byte(‘Th\000 omas’::bytea , 4, 64) |
Th\000o@as |
sha224(bytea) |
bytea |
SHA-224哈希 |
sha224 (‘abc’) |
\x23097d223405d8 228642a477b da255b32aad bce4bda0b3f 7e36c9da7 |
sha256(bytea) |
bytea |
SHA-256哈希 |
sha256 (‘abc’) |
\xba7816bf8f0 1cfea414140 de5dae2223b 00361a39617 7a9cb410ff6 1f20015ad |
sha384(bytea) |
bytea |
SHA-384哈希 |
sha384 (‘abc’) |
\xcb00753f45 a35e8bb5a03 d699ac65007 272c32ab0ed ed1631a8b60 5a43ff5bed8 086072ba1e7 cc2358baeca 134c825a7 |
sha512(bytea) |
bytea |
SHA-512哈希 |
sha512 (‘abc’) |
\xddaf35a19 3617abacc41 7349ae20413 112e6fa4e89 a97ea20a9ee ee64b55d39a 2192992a274 fc1a836ba3c 23a3feebbd4 54d4423643c e80e2a9ac94 fa54ca49f |
get_byte
和set_byte
把一个二进制串中的一个字节计数为字节
0。get_bit
和set_bit
在每一个字节中从右边起计数位;例如位
0 是第一个字节的最低有效位,而位 15 是第二个字节的最高有效位。
注意由于历史原因,函数md5
返回的是一个十六进制编码的text
值,而SHA-2函数返回类型bytea
。可以使用函数encode
和decode
在两者之间转换,例如encode(sha256('abc'), 'hex')
可以得到一个十六进制编码的文本表示。