二进制串函数和操作符
二进制串函数和操作符¶
本节描述那些检查和操作类型为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(
string
placingstring
from int[for int]
) - 返回类型
- bytea
- 描述
- 替换子串
- 示例
- ``` sql
seaboxsql=# select overlay('Th000omas'::bytea placing '002003'::bytea from 2 for 3);
overlay
T002003mas (1 row) ```
position()
¶
- 语法
- position(
substring
instring
) - 返回类型
- 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]
bytes
fromstring
) - 返回类型
- bytea
- 描述
- 从string的开头或结尾删除只包含出现在bytes中字节的最长串
- 示例
- ``` sql
seaboxsql=# select trim('000001'::bytea from '000Tom001'::bytea);
btrim
Tom (1 row) ```
其他二进制串函数¶
还有一些二进制串处理函数可以使用,在下面列出。其中有一些是在内部使用,用于实现SQL二进制串函数和操作符列出的SQL标准串函数。
btrim()
¶
- 语法
- btrim(
string
bytea,bytes
bytea) - 返回类型
- bytea
- 描述
- 从string的开头或结尾删除只由出现在bytes中字节组成的最长串
- 示例
- ``` sql
seaboxsql=# select btrim('000trim001'::bytea, '000001'::bytea);
btrim
trim (1 row) ```
decode()
¶
- 语法
- decode(
string
text,format
text) - 返回类型
- bytea
- 描述
- 从string中的文本表示解码二进制数据。format的参数和在encode中 一样。
- 示例
- ``` sql
seaboxsql=# select decode('123000456', 'escape');
decode
123000456 (1 row) ```
encode()
¶
- 语法
- encode(
data
bytea,format
text) - 返回类型
- 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 是第二个字节的最高有效位。