二进制串函数和操作符
二进制串函数和操作符¶
本节描述那些检查和操作类型为bytea的值的函数和操作符。
SQL定义了一些使用关键字而不是逗号来分割参数的串函数。
注意
本节的示例结果均假设GUC参数bytea_output被设置为escape(传统PostgreSQL格式)。
SQL二进制串函数和操作符¶
||¶
- 语法
string || string- 返回类型
- bytea
- 描述
- 串连接
- 示例
- ``` sql
seaboxsql=# select '\Post'::bytea || '047gres000'::bytea;
?column?
\Post'gres000 (1 row) ```
octet_length()¶
- 语法
- octet_length(
string) - 返回类型
- int
- 描述
- 二进制串中的字节数
- 示例
- ``` sql
seaboxsql=# select octet_length('jo000se'::bytea);
octet_length
5(1 row) ```
overlay()¶
- 语法
- overlay(
stringplacingstringfrom int[for int]) - 返回类型
- bytea
- 描述
- 替换子串
- 示例
- ``` sql
seaboxsql=# select overlay('Th000omas'::bytea placing '002003'::bytea from 2 for 3);
overlay
T002003mas (1 row) ```
position()¶
- 语法
- position(
substringinstring) - 返回类型
- int
- 描述
- 指定子串的位置
- 示例
- ``` sql
seaboxsql=# select position('000om'::bytea in 'Th000omas'::bytea);
position
3(1 row) ```
substring()¶
- 语法
- substring(
string[from int] [for int]) - 返回类型
- bytea
- 描述
- 提取子串
- 示例
- ``` sql
seaboxsql=# select substring('Th000omas'::bytea from 2 for 3);
substring
h000o (1 row) ```
trim()¶
- 语法
- trim(
[both]bytesfromstring) - 返回类型
- bytea
- 描述
- 从string的开头或结尾删除只包含出现在bytes中字节的最长串
- 示例
- ``` sql
seaboxsql=# select trim('000001'::bytea from '000Tom001'::bytea);
btrim
Tom (1 row) ```
其他二进制串函数¶
还有一些二进制串处理函数可以使用,在下面列出。其中有一些是在内部使用,用于实现SQL二进制串函数和操作符列出的SQL标准串函数。
btrim()¶
- 语法
- btrim(
stringbytea,bytesbytea) - 返回类型
- bytea
- 描述
- 从string的开头或结尾删除只由出现在bytes中字节组成的最长串
- 示例
- ``` sql
seaboxsql=# select btrim('000trim001'::bytea, '000001'::bytea);
btrim
trim (1 row) ```
decode()¶
- 语法
- decode(
stringtext,formattext) - 返回类型
- bytea
- 描述
- 从string中的文本表示解码二进制数据。format的参数和在encode中 一样。
- 示例
- ``` sql
seaboxsql=# select decode('123000456', 'escape');
decode
123000456 (1 row) ```
encode()¶
- 语法
- encode(
databytea,formattext) - 返回类型
- text
- 描述
- 将二进制数据编码为一个文本表示。支持的格式有:base64、hex、escape。escape将零字节和高位组字节转换为八进制序列(
\nnn)和双反斜线。 - 示例
- ``` sql
seaboxsql=# select encode('123000456'::bytea, 'escape');
encode
123000456 (1 row) ```
get_bit()¶
- 语法
- get_bit(
string,offset) - 返回类型
- int
- 描述
- 从串中抽取位
- 示例
- ``` sql
seaboxsql=# select get_bit('Th000omas'::bytea, 45);
get_bit
1 (1 row) ```
get_byte()¶
- 语法
- get_byte(
string,offset) - 返回类型
- int
- 描述
- 从串中抽取字节
- 示例
- ``` sql
seaboxsql=# select get_byte('Th000omas'::bytea, 4);
get_byte
109 (1 row) ```
length()¶
- 语法
- length(
string) - 返回类型
- int
- 描述
- 二进制串的长度
- 示例
- ``` sql
seaboxsql=# select length('jo000se'::bytea);
length
5 (1 row) ```
md5()¶
- 语法
- md5(
string) - 返回类型
- text
- 描述
-
计算string的MD5哈希码,以十六进制形式返回结果。
注意: 由于历史原因,函数
md5返回的是一个十六进制编码的text值,而SHA-2函数返回类型bytea。可以使用函数encode和decode在两者之间转换,例如encode(sha256('abc'),'hex')可以得到一个十六进制编码的文本表示。 - 示例
- ``` sql
seaboxsql=# select md5('Th000omas'::bytea);
md5
8ab2d3c9689aaf18b4958c334c82d8b1 (1 row) ```
set_bit()¶
- 语法
- set_bit(
string,offset,newvalue) - 返回类型
- bytea
- 描述
- 设置串中的位
- 示例
- ``` sql
seaboxsql=# select set_bit('Th000omas'::bytea, 45, 0);
set_bit
Th000omAs (1 row) ```
set_byte()¶
- 语法
- set_byte(
string,offset,newvalue) - 返回类型
- bytea
- 描述
- 设置串中的字节
- 示例
- ``` sql
seaboxsql=# select set_byte('Th000omas'::bytea, 4, 64);
set_byte
Th000o@as (1 row) ```
sha224()¶
- 语法
- sha224(bytea)
- 返回类型
- bytea
- 描述
- SHA-224哈希
- 示例
- ``` sql
seaboxsql=# select sha224('abc');
sha224
x23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7 (1 row) ```
sha256()¶
- 语法
- sha256(bytea)
- 返回类型
- bytea
- 描述
- SHA-256哈希
- 示例
- ``` sql
seaboxsql=# select sha256('abc');
sha256
xba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad (1 row) ```
sha384()¶
- 语法
- sha384(bytea)
- 返回类型
- bytea
- 描述
- SHA-384哈希
- 示例
- ``` sql
seaboxsql=# select sha384('abc');
sha384
xcb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7 (1 row) ```
sha512()¶
- 语法
- sha512(bytea)
- 返回类型
- bytea
- 描述
- SHA-512哈希
- 示例
- ``` sql
seaboxsql=# select sha512('abc');
sha512
xddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f (1 row) ```
get_byte和set_byte把一个二进制串中的一个字节计数为字节0。get_bit和set_bit在每一个字节中从右边起计数位;例如位 0是第一个字节的最低有效位,而位 15 是第二个字节的最高有效位。