9.5. Функции и операторы для работы с бинарными строками#
9.5. Функции и операторы для работы с бинарными строками #
Этот раздел описывает функции и операторы для изучения и
манипулирования двоичными строками, то есть значениями типа bytea
.
Многие из них эквивалентны по назначению и синтаксису
функциям работы со строками, описанным в предыдущем разделе.
SQL определяет некоторые строковые функции, которые используют ключевые слова, а не запятые, для разделения аргументов. Подробности приведены в разделе Таблица 9.11. Tantor BE также предоставляет версии этих функций, которые используют обычный синтаксис вызова функций (см. раздел Таблица 9.12).
Таблица 9.11. SQL Функции и операторы для работы с бинарными строками
Дополнительные функции для манипуляции с бинарными строками доступны и перечислены в Таблица 9.12. Некоторые из них используются внутренне для реализации стандартных строковых функций SQL, перечисленных в Таблица 9.11.
Таблица 9.12. Другие функции для работы с двоичными строками
Функция Описание Пример(ы) |
---|
Возвращает количество установленных битов в двоичной строке (также известное как “popcount”).
|
Извлекает n-й бит из двоичной строки.
|
Извлекает n-й байт из двоичной строки.
|
Возвращает количество байтов в двоичной строке.
|
Возвращает количество символов в двоичной строке, предполагая, что это текст в заданной кодировке
|
Вычисляет MD5-hash двоичной строки, результат записывается в шестнадцатеричном формате.
|
Устанавливает n-й бит в
двоичной строке в значение
|
Устанавливает n-й байт в
двоичной строке в значение
|
Вычисляет SHA-224 хеш двоичной строки.
|
Вычисляет SHA-256 хеш hash бинарной строки.
|
Вычисляет SHA-384 хеш двоичной строки.
|
Вычисляет SHA-512 хеш hash двоичной строки.
|
Извлекает подстроку из
|
Функции 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. Функции преобразования текста/бинарной строки
Функция Описание Пример(ы) |
---|
Преобразует двоичную строку, представляющую текст в кодировке
|
Преобразует двоичную строку, представляющую текст в кодировке
|
Преобразует строку
|
Преобразует двоичные данные в текстовое представление; поддерживаемые значения
|
Декодирует двоичные данные из текстового представления; поддерживаемые значения
|
Функции encode
и decode
поддерживают следующие текстовые форматы:
- base64 #
Формат
base64
соответствует RFC 2045 Раздел 6.8. Согласно RFC, закодированные строки разбиваются на 76 символов. Однако вместо маркера конца строки MIME CRLF используется только символ новой строки. Функцияdecode
игнорирует символы возврата каретки, новой строки, пробела и табуляции. В противном случае возникает ошибка, когдаdecode
получает недопустимые данные base64 — включая случаи, когда завершающая подкладка некорректна.- escape #
Формат
escape
преобразует нулевые байты и байты с установленным старшим битом в восьмеричные последовательности экранирования (\
nnn
), и удваивает обратные косые черты. Другие значения байтов представлены буквально. Функцияdecode
вызовет ошибку, если за обратной косой чертой не следует либо вторая обратная косая черта, либо три восьмеричные цифры; она принимает другие значения байтов без изменений.- hex #
Формат
hex
представляет каждые 4 бита данных в виде одной шестнадцатеричной цифры, от0
доf
, записывая старший разряд каждого байта первым. Функцияencode
выводит шестнадцатеричные цифры отa
доf
в нижнем регистре. Поскольку наименьшая единица данных составляет 8 бит, всегда возвращается четное количество символов при вызове функцииencode
. Функцияdecode
принимает символыa
-f
в верхнем или нижнем регистре. Возникает ошибка, когда функцииdecode
передаются недопустимые шестнадцатеричные данные, включая случай с нечетным количеством символов.
См. также агрегатную функцию string_agg
в
Раздел 9.21 и функции для работы с большими объектами
в Раздел 32.4.