9.5. Функции и операторы двоичных строк

В этом разделе описываются функции и операторы для работы с данными типа bytea.

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

Замечание: В примерах, приведённых на этой странице, подразумевается, что параметр сервера bytea_output равен escape (выбран традиционный формат PostgreSQL).

Таблица 9-9. SQL-функции и операторы для работы с двоичными строками

ФункцияТип результатаОписаниеПримерРезультат
string || string bytea Конкатенация строк E'\\\\Post'::bytea || E'\\047gres​\\000'::bytea \\Post'gres​\000
octet_length(string) int Число байт в двоичной строке octet_length(E'jo\\000se'::bytea) 5
overlay(string placing string from int [for int]) bytea Заменяет подстроку overlay(E'Th\\000​omas'::bytea placing E'\\002\\003'::bytea from 2 for 3) T\\002​\\003​mas
position(substring in string) int Положение указанной подстроки position(E'\\000om'::bytea in E'Th\\000​omas'::bytea) 3
substring(string [from int] [for int]) bytea Извлекает подстроку substring(E'Th\\000​omas'::bytea from 2 for 3) h\000o
trim([both] bytes from string) bytea Удаляет наибольшую подстроку, содержащую только байты bytes, с начала и с конца строки string trim(E'\\000\\001'::bytea from E'\\000Tom\\001'::bytea) Tom

В PostgreSQL есть и другие функции для работы с двоичными строками, перечисленные в Таблице 9-10. Некоторые из них используются в качестве внутренней реализации стандартных функций SQL, приведённых в Таблице 9-9.

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

ФункцияТип результатаОписаниеПримерРезультат
btrim(string bytea, bytes bytea) bytea Удаляет наибольшую подстроку, содержащую только байты bytes, с начала и с конца строки string btrim(E'\\000trim\\001'::bytea, E'\\000\\001'::bytea) trim
decode(string text, format text) bytea Получает двоичные данные из текстового представления в string. Значения параметра format те же, что и для функции encode. decode(E'123​\\000456', 'escape') 123\000456
encode(data bytea, format text) text Переводит двоичные данные в текстовое представление в одном из форматов: base64, hex, escape. Формат escape преобразует нулевые байты и байты с 1 в старшем бите в восьмеричные последовательности \nnn и дублирует обратную косую черту. encode(E'123​\\000456'::bytea, 'escape') 123\000456
get_bit(string, offset) int Извлекает бит из строки get_bit(E'Th\\000​omas'::bytea, 45) 1
get_byte(string, offset) int Извлекает байт из строки get_byte(E'Th\\000​omas'::bytea, 4) 109
length(string) int Длина двоичной строки length(E'jo\\000se'::bytea) 5
md5(string) text Вычисляет MD5-хеш строки string и возвращает результат в 16-ричном виде md5(E'Th\\000​omas'::bytea) 8ab2d3c9​689aaf18 b4958c33​4c82d8b1
set_bit(string, offset, newvalue) bytea Устанавливает значение бита в строке set_bit(E'Th\\000​omas'::bytea, 45, 0) Th\000omAs
set_byte(string, offset, newvalue) bytea Устанавливает значение байта в строке set_byte(E'Th\\000​omas'::bytea, 4, 64) Th\000o@as

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

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