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.