# 9.5.二进制字符串函数和运算符
本节介绍用于检查和操作二进制字符串(即类型值)的函数和运算符二进制数据
。其中许多函数在用途和语法上与上一节中描述的文本字符串函数等效。
SQL定义了一些字符串函数,它们使用关键字而不是逗号来分隔参数。详情见表9.11.PostgreSQL还提供了使用常规函数调用语法的这些函数的版本(请参见表9.12).
表9.11.SQL二进制字符串函数和运算符
其他二进制字符串操作函数可用,并在中列出表9.12。其中一些函数在内部用于实现中列出的SQL标准字符串函数表9.11.
表9.12.其他二进制字符串函数
作用 描述 例子 |
---|
比特计数 (字节 二进制数据 ) →比基特 返回二进制字符串(也称为“popcount”)中设置的位数。 位计数('\x1234567890'::字节) →15 |
btrim (字节 二进制数据 ,字节删除 二进制数据 ) → 二进制数据 删除仅包含中出现的字节的最长字符串* 字节删除 自始至终字节 *.btrim(“\x1234567890':字节茶,\x9012'::字节茶) → \x345678 |
吃点东西 ( 字节 二进制数据 , n 比基特 ) → 整数 摘录不二进制字符串中的位。 获取位('\x1234567890'::bytea,30) → 1. |
获取字节 ( 字节 二进制数据 , n 整数 ) → 整数 摘录不二进制字符串中的字节。 获取字节('\x1234567890'::bytea,4) → 144 |
长 ( 二进制数据 ) → 整数 返回二进制字符串中的字节数。 长度('\x1234567890'::字节) → 5. |
长 ( 字节 二进制数据 , 编码 名称 ) → 整数 返回二进制字符串中的字符数,假设它是给定字符串中的文本* 编码 *.长度('jose'::bytea,'UTF8') → 4. |
ltrim ( 字节 二进制数据 , 字节删除 二进制数据 ) → 二进制数据 删除仅包含中出现的字节的最长字符串* 字节删除 从一开始字节 *.ltrim(“\x1234567890':bytea”,\x9012':bytea) → \x34567890 |
md5 ( 二进制数据 ) → 文本 计算MD5搞砸二进制字符串,结果用十六进制写成。 md5('Th\000OMA':bytea) → 8ab2d3c9689aaf18b4958c334c82d8b1 |
rtrim ( 字节 二进制数据 , 字节删除 二进制数据 ) → 二进制数据 删除仅包含中出现的字节的最长字符串* 字节删除 从字节 *.rtrim(“\x1234567890':字节茶,\x9012'::字节茶) → \x12345678 |
设位 ( 字节 二进制数据 , n 比基特 , 新价值 整数 ) → 二进制数据 设置不二进制字符串中的位到* 新价值 *.设置位('\x1234567890'::字节,30,0) → \x1234563890 |
设置字节 ( 字节 二进制数据 , n 整数 , 新价值 整数 ) → 二进制数据 设置不二进制字符串中的字节到* 新价值 *.设置字节('\x1234567890'::bytea,4,64) → \x1234567840 |
sha224 ( 二进制数据 ) → 二进制数据 计算SHA-224搞砸二进制字符串的。 sha224('abc':bytea) → \x23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7 |
sha256 ( 二进制数据 ) → 二进制数据 计算SHA-256搞砸二进制字符串的。 sha256('abc':bytea) → \xba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad |
sha384 ( 二进制数据 ) → 二进制数据 计算SHA-384搞砸二进制字符串的。 sha384('abc':bytea) → \xcb00753f45a35e8bb5a03d699ac65007272C32AB0ED1631A8B605A43FF5BED8086072ba1e7cc2358baeca134c825a7 |
sha512 ( 二进制数据 ) → 二进制数据 计算SHA-512搞砸二进制字符串的。 sha512('abc':bytea) → \xddaf35a193617abacc417349ae20413112E6FA4E89A97EA20A9EE64B55D39A2192992A274FC1A836BA3C23A3FEEBD454d4423643ce80e2a9ac94fa54ca49f |
substr ( 字节 二进制数据 , 开始 整数 [, 计数 整数 ] ) → 二进制数据 提取* 字节 从开始 '第个字节,并扩展为计数 *字节(如果指定)。(与子串(* 字节*来自* 开始*因为* 计数*) .)substr(“\x1234567890”::bytea,3,2) → \x5678 |
功能获取字节
和设置字节
将二进制字符串的第一个字节编号为字节0.功能吃点东西
和设位
从每个字节的右边开始对位进行编号;例如,位0是第一个字节的最低有效位,位15是第二个字节的最高有效位。
出于历史原因md5
返回类型为的十六进制编码值文本
而SHA-2函数返回类型二进制数据
.使用这些功能编码
和解码
在两者之间转换。比如写编码(sha256('abc'),'hex')
获取十六进制编码的文本表示,或解码(md5('abc'),'hex')
得到一个二进制数据
价值
中显示了用于在不同字符集(编码)之间转换字符串以及以文本形式表示任意二进制数据的函数表9.13.对于这些函数,类型为的参数或结果文本
以数据库的默认编码表示,而二进制数据
在另一个参数命名的编码中。
表9.13.文本/二进制字符串转换函数
作用 描述 例子 |
---|
转换 ( 字节 二进制数据 , src_编码 名称 , dest_编码 名称 ) → 二进制数据 转换表示编码中文本的二进制字符串* src_编码 对二进制字符串进行编码dest_编码 *(见第24.3.4节对于可用的转换)。转换('text_in_utf8'、'utf8'、'LATIN1') → \X7465787445F696E5F75746638 |
把你从 ( 字节 二进制数据 , src_编码 名称 ) → 文本 转换表示编码中文本的二进制字符串* src_编码 *到文本 在数据库编码中(请参见第24.3.4节对于可用的转换)。转换自('text_in_utf8'、'utf8') → 文本_in_utf8 |
转化为 ( 一串 文本 , dest_编码 名称 ) → 二进制数据 皈依 文本 字符串(在数据库编码中)转换为在编码中编码的二进制字符串*dest_编码 *(见第24.3.4节对于可用的转换)。将_转换为('some_text'、'UTF8') → \x736f6d655f74657874 |
编码 ( 字节 二进制数据 , 总体安排 文本 ) → 文本 将二进制数据编码为文本表示;支持* 总体安排 *价值观包括:base64 , 逃跑 , 十六进制 .编码('123\000\001','base64') → 姆蒂扎= |
解码 ( 一串 文本 , 总体安排 文本 ) → 二进制数据 从文本表示中解码二进制数据;支持* 总体安排 *值与的值相同编码 .解码('MTIzAAE=','base64') → \x3132330001 |
这个编码
和解码
函数支持以下文本格式:
这个base64
格式是RFC 2045第6.8节 (opens new window).根据RFC,编码行在76个字符处断开。然而,除了MIME CRLF行尾标记,行尾标记只使用换行符。这个解码
函数忽略回车符、换行符、空格和制表符。否则,当解码
提供的base64数据无效-包括尾随填充不正确时。
这个逃跑
format将零字节和高位设置的字节转换为八进制转义序列(\
nnn
),它会加倍反斜杠。其他字节值按字面表示。这个解码
如果反斜杠后面没有第二个反斜杠或三个八进制数字,函数将引发错误;它接受其他不变的字节值。
这个十六进制
格式将每4位数据表示为一个十六进制数字,0
通过f
,首先写入每个字节的高阶数字。这个编码
函数输出A.
-f
小写的十六进制数字。因为数据的最小单位是8位,所以返回的字符数总是偶数编码
这个解码
函数接受A.
-f
大写或小写字符。当解码
给出的十六进制数据无效,包括奇数字符。