9.5. Функции и операторы для работы с бинарными строками#

9.5. Функции и операторы для работы с бинарными строками

9.5. Функции и операторы для работы с бинарными строками

Этот раздел описывает функции и операторы для изучения и манипулирования двоичными строками, то есть значениями типа bytea. Многие из них эквивалентны по назначению и синтаксису функциям работы со строками, описанным в предыдущем разделе.

SQL определяет некоторые строковые функции, которые используют ключевые слова, а не запятые, для разделения аргументов. Подробности приведены в разделе Таблица 9.11. Tantor SE также предоставляет версии этих функций, которые используют обычный синтаксис вызова функций (см. раздел Таблица 9.12).

Таблица 9.11. SQL Функции и операторы для работы с бинарными строками

Функция/Оператор

Описание

Пример(ы)

bytea || byteabytea

Сцепляет две двоичные строки.

'\x123456'::bytea || '\x789a00bcde'::bytea\x123456789a00bcde

bit_length ( bytea ) → integer

Возвращает количество битов в двоичной строке (8 раз функция octet_length).

bit_length('\x123456'::bytea)24

octet_length ( bytea ) → integer

Возвращает количество байтов в двоичной строке.

octet_length('\x123456'::bytea)3

overlay ( bytes bytea PLACING newsubstring bytea FROM start integer [ FOR count integer ] ) → bytea

Заменяет подстроку bytes, начиная с start-го байта и распространяющуюся на count байт, на newsubstring. Если count не указан, по умолчанию используется длина newsubstring.

overlay('\x1234567890'::bytea placing '\002\003'::bytea from 2 for 3)\x12020390

position ( substring bytea IN bytes bytea ) → integer

Возвращает первый индекс начала указанной подстроки substring внутри bytes, или ноль, если она отсутствует.

position('\x5678'::bytea in '\x1234567890'::bytea)3

substring ( bytes bytea [ FROM start integer ] [ FOR count integer ] ) → bytea

Извлекает подстроку из bytes, начиная с start-го байта, если он указан, и заканчивая после count байтов, если он указан. Укажите хотя бы один из параметров start и count.

substring('\x1234567890'::bytea from 3 for 2)\x5678

trim ( [ LEADING | TRAILING | BOTH ] bytesremoved bytea FROM bytes bytea ) → bytea

Удаляет самую длинную строку, содержащую только байты, указанные в bytesremoved, с начала, конца или обоих концов (BOTH по умолчанию) bytes.

trim('\x9012'::bytea from '\x1234567890'::bytea)\x345678

trim ( [ LEADING | TRAILING | BOTH ] [ FROM ] bytes bytea, bytesremoved bytea ) → bytea

Это нестандартный синтаксис для функции trim().

trim(both from '\x1234567890'::bytea, '\x9012'::bytea)\x345678


Дополнительные функции для манипуляции с бинарными строками доступны и перечислены в Таблица 9.12. Некоторые из них используются внутренне для реализации стандартных строковых функций SQL, перечисленных в Таблица 9.11.

Таблица 9.12. Другие функции для работы с двоичными строками

Функция

Описание

Пример(ы)

bit_count ( bytes bytea ) → bigint

Возвращает количество установленных битов в двоичной строке (также известное как popcount).

bit_count('\x1234567890'::bytea)15

btrim ( байты bytea, удаленныебайты bytea ) → bytea

Удаляет самую длинную строку, содержащую только байты, указанные в bytesremoved, из начала и конца bytes.

btrim('\x1234567890'::bytea, '\x9012'::bytea)\x345678

get_bit ( bytes bytea, n bigint ) → integer

Извлекает n-й бит из двоичной строки.

get_bit('\x1234567890'::bytea, 30)1

get_byte ( bytes bytea, n integer ) → integer

Извлекает n-й байт из двоичной строки.

get_byte('\x1234567890'::bytea, 4)144

length ( bytea ) → integer

Возвращает количество байтов в двоичной строке.

length('\x1234567890'::bytea)5

length ( байты bytea, encoding name ) → integer

Возвращает количество символов в двоичной строке, предполагая, что это текст в заданной кодировке encoding.

length('jose'::bytea, 'UTF8')4

ltrim ( bytes bytea, bytesremoved bytea ) → bytea

Удаляет самую длинную строку, содержащую только байты, указанные в bytesremoved, из начала bytes.

ltrim('\x1234567890'::bytea, '\x9012'::bytea)\x34567890

md5 ( bytea ) → text

Вычисляет MD5-hash двоичной строки, результат записывается в шестнадцатеричном формате.

md5('Th\000omas'::bytea)8ab2d3c9689aaf18​b4958c334c82d8b1

rtrim ( bytes bytea, bytesremoved bytea ) → bytea

Удаляет самую длинную строку, содержащую только байты, указанные в bytesremoved, из конца bytes.

rtrim('\x1234567890'::bytea, '\x9012'::bytea)\x12345678

set_bit ( bytes bytea, n bigint, newvalue integer ) → bytea

Устанавливает n-й бит в двоичной строке в значение newvalue.

set_bit('\x1234567890'::bytea, 30, 0)\x1234563890

set_byte ( bytes bytea, n integer, newvalue integer ) → bytea

Устанавливает n-й байт в двоичной строке в значение newvalue.

set_byte('\x1234567890'::bytea, 4, 64)\x1234567840

sha224 ( bytea ) → bytea

Вычисляет SHA-224 хеш двоичной строки.

sha224('abc'::bytea)\x23097d223405d8228642a477bda2​55b32aadbce4bda0b3f7e36c9da7

sha256 ( bytea ) → bytea

Вычисляет SHA-256 хеш hash бинарной строки.

sha256('abc'::bytea)\xba7816bf8f01cfea414140de5dae2223​b00361a396177a9cb410ff61f20015ad

sha384 ( bytea ) → bytea

Вычисляет SHA-384 хеш двоичной строки.

sha384('abc'::bytea)\xcb00753f45a35e8bb5a03d699ac65007​272c32ab0eded1631a8b605a43ff5bed​8086072ba1e7cc2358baeca134c825a7

sha512 ( bytea ) → bytea

Вычисляет SHA-512 хеш hash двоичной строки.

sha512('abc'::bytea)\xddaf35a193617abacc417349ae204131​12e6fa4e89a97ea20a9eeee64b55d39a​2192992a274fc1a836ba3c23a3feebbd​454d4423643ce80e2a9ac94fa54ca49f

substr ( bytes bytea, start integer [, count integer ] ) → bytea

Извлекает подстроку из bytes, начиная с start-го байта и продолжающуюся count байтов, если это указано. (То же самое, что и substring(байты from start for count)).

substr('\x1234567890'::bytea, 3, 2)\x5678


Функции get_byte и set_byte нумеруют первый байт двоичной строки как байт 0. Функции get_bit и set_bit нумеруют биты справа в каждом байте; например, бит 0 является наименее значимым битом первого байта, а бит 15 - наиболее значимым битом второго байта.

Для исторических причин функция md5 возвращает шестнадцатеричное значение типа text, в то время как функции SHA-2 возвращают тип bytea. Используйте функции encode и decode для преобразования между ними. Например, напишите encode(sha256('abc'), 'hex'), чтобы получить шестнадцатеричное текстовое представление, или decode(md5('abc'), 'hex'), чтобы получить значение типа bytea.

Функции для преобразования строк между различными наборами символов (кодировками) и для представления произвольных двоичных данных в текстовой форме показаны в Таблица 9.13. Для этих функций аргумент или результат типа text выражается в кодировке по умолчанию базы данных, в то время как аргументы или результаты типа bytea находятся в кодировке, указанной другим аргументом.

Таблица 9.13. Функции преобразования текста/бинарной строки

Функция

Описание

Пример(ы)

convert ( bytes bytea, src_encoding name, dest_encoding name ) → bytea

Преобразует двоичную строку, представляющую текст в кодировке src_encoding, в двоичную строку в кодировке dest_encoding (см. Раздел 23.3.4 для доступных преобразований).

convert('text_in_utf8', 'UTF8', 'LATIN1')\x746578745f696e5f75746638

convert_from ( bytes bytea, src_encoding name ) → text

Преобразует двоичную строку, представляющую текст в кодировке src_encoding, в text в кодировке базы данных (см. Раздел 23.3.4 для доступных преобразований).

convert_from('text_in_utf8', 'UTF8')text_in_utf8

convert_to ( string text, dest_encoding name ) → bytea

Преобразует строку text (в кодировке базы данных) в бинарную строку, закодированную в кодировке dest_encoding (см. Раздел 23.3.4 для доступных преобразований).

convert_to('some_text', 'UTF8')\x736f6d655f74657874

encode ( байты bytea, формат text ) → text

Преобразует двоичные данные в текстовое представление; поддерживаемые значения format: base64, escape, hex.

encode('123\000\001', 'base64')MTIzAAE=

decode ( string text, формат text ) → bytea

Декодирует двоичные данные из текстового представления; поддерживаемые значения формата такие же, как и для encode.

decode('MTIzAAE=', 'base64')\x3132330001


Функции encode и decode поддерживают следующие текстовые форматы:

base64

Формат base64 соответствует разделу 6.8 RFC 2045. Согласно RFC, закодированные строки разбиваются на 76 символов. Однако вместо символа CRLF MIME в конце строки используется только символ перехода строки. Функция decode игнорирует символы возврата каретки, перехода строки, пробела и табуляции. В противном случае, при передаче недопустимых данных base64 функции decode возникает ошибка, включая неправильное заполнение дополнительными символами.

escape

Формат escape преобразует нулевые байты и байты с установленным старшим битом в восьмеричные последовательности экранирования (\nnn), и удваивает обратные косые черты. Другие значения байтов представлены буквально. Функция decode вызовет ошибку, если за обратной косой чертой не следует либо вторая обратная косая черта, либо три восьмеричные цифры; она принимает другие значения байтов без изменений.

hex

Формат hex представляет каждые 4 бита данных в виде одной шестнадцатеричной цифры, от 0 до f, записывая старший разряд каждого байта первым. Функция encode выводит шестнадцатеричные цифры от a до f в нижнем регистре. Поскольку наименьшая единица данных составляет 8 бит, всегда возвращается четное количество символов при вызове функции encode. Функция decode принимает символы a-f в верхнем или нижнем регистре. Возникает ошибка, когда функции decode передаются недопустимые шестнадцатеричные данные, включая случай с нечетным количеством символов.

См. также агрегатную функцию string_agg в Раздел 9.21 и функции для работы с большими объектами в Раздел 33.4.