跳转至

二进制串函数和操作符

二进制串函数和操作符

本节描述那些检查和操作类型为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 placing string 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 in string)
返回类型
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 from string)
返回类型
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。可以使用函数encodedecode在两者之间转换,例如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_byteset_byte把一个二进制串中的一个字节计数为字节0。get_bitset_bit在每一个字节中从右边起计数位;例如位 0是第一个字节的最低有效位,而位 15 是第二个字节的最高有效位。