9.4. Строковые функции и операторы #
В этом разделе описаны функции и операторы для работы с текстовыми строками. Под строками в данном контексте подразумеваются значения типов character, character varying и text. Если не отмечено обратное, эти функции и операторы принимают и возвращают тип text. С тем же успехом в аргументах может передаваться тип character varying. Аргументы же типа character до вызова оператора или функции приводятся к типу text, вследствие чего завершающие пробелы в значении character будут обрезаться.
В SQL определены несколько строковых функций, в которых аргументы разделяются не запятыми, а ключевыми словами. Они перечислены в Таблице 9.9. PostgreSQL также предоставляет варианты этих функций с синтаксисом, обычным для функций (см. Таблицу 9.10).
Примечание
Оператор конкатенации строк (||) сможет принять нестроковый аргумент, если хотя бы один аргумент имеет строковый тип, как показано в Таблице 9.9. В других случаях можно использовать явное преобразование в text, чтобы оператор принял нестроковый аргумент.
Таблица 9.9. Строковые функции и операторы языка SQL
Функция/оператор Описание Пример(ы) |
|---|
Соединяет две строки.
|
Преобразует нестроковый аргумент в текст, а затем соединяет две строки. (Нестроковый аргумент не должен быть массивом, иначе возникает неоднозначность с операторами массивов
|
Удаляет наибольшую подстроку, содержащую только символы
|
Проверяет, соответствует ли строка определённой форме нормализации Юникода. Форма указывается в необязательном ключевом слове
|
Возвращает число бит в строке (это число в 8 раз больше
|
Возвращает число символов в строке.
|
Переводит символы строки в нижний регистр в соответствии с правилами локали базы данных.
|
Дополняет строку
|
Удаляет наибольшую подстроку, содержащую только символы
|
Переводит строку в заданную форму нормализации Unicode. Форма указывается в необязательном ключевом слове
|
Возвращает число байт в строке.
|
Возвращает число байт в строке. Так как эта вариация функции принимает непосредственно тип
|
Заменяет подстроку в
|
Возвращает начальную позицию первого вхождения
|
Дополняет строку
|
Удаляет наибольшую подстроку, содержащую только символы
|
Извлекает из
|
Извлекает первую подстроку, соответствующую регулярному выражению в стиле POSIX; см. Подраздел 9.7.3.
|
Извлекает первую подстроку, соответствующую регулярному выражению в стиле SQL; см. Подраздел 9.7.2. Первая форма определена в стандарте, начиная с SQL:2003, а вторая существовала только в стандарте SQL:1999 и её следует считать устаревшей.
|
Удаляет наибольшую подстроку, содержащую только символы
|
Это нестандартный синтаксис вызова
|
Возвращает |
Переводит символы строки в верхний регистр, в соответствии с правилами локали базы данных.
|
Кроме этого, в PostgreSQL есть и другие функции для работы со строками, перечисленные в Таблице 9.10. (Некоторые из них используются в качестве внутренней реализации стандартных строковых функций SQL, приведённых в Таблице 9.9.) Также имеются операторы сопоставления шаблонов, описанные в Разделе 9.7, и операторы полнотекстового поиска, описанные в Главе 12.
Таблица 9.10. Другие строковые функции и операторы
Функция/оператор Описание Пример(ы) |
|---|
Возвращает true, если первая строка начинается со второй строки (равнозначно функции
|
Возвращает числовой код первого символа аргумента. Для UTF8 возвращает код символа в Unicode. Для других многобайтных кодировок аргумент должен быть ASCII-символом.
|
Возвращает символ с данным кодом. Для UTF8 аргумент воспринимается как код символа Unicode, а для других кодировок он должен указывать на ASCII-символ. Эта функция не может выдать
|
Соединяет текстовые представления всех аргументов, игнорируя NULL.
|
Соединяет вместе все аргументы, кроме первого, через разделитель. Разделитель задаётся в первом аргументе и должен быть отличен от NULL. В других аргументах значение NULL игнорируется.
|
Форматирует аргументы в соответствии со строкой формата; см. Подраздел 9.4.1. Эта функция работает подобно
|
Переводит первую букву каждого слова в строке в верхний регистр, а остальные — в нижний. Словами считаются последовательности алфавитно-цифровых символов, разделённые любыми другими символами.
|
Возвращает первые
|
Возвращает число символов в строке.
|
Вычисляет MD5-хеш аргумента и выдаёт результат в шестнадцатеричном виде.
|
Раскладывает полный идентификатор, задаваемый параметром
|
Возвращает имя текущей клиентской кодировки.
|
Преобразует аргумент в строку, подходящую для использования в качестве идентификатора в SQL-операторе. При необходимости идентификатор заключается в кавычки (например, если он содержит символы, недопустимые в открытом виде, или буквы в разных регистрах). Если переданная строка содержит кавычки, они дублируются. См. также Пример 41.1.
|
Преобразует аргумент в строку, подходящую для использования в качестве текстовой константы в SQL-операторе. Внутренние символы апостроф и обратная косая черта при этом дублируются. Заметьте, что
|
Переводит данное значение в текстовый вид и заключает в апострофы как текстовую строку. Символы апостроф и обратная косая черта при этом дублируются.
|
Преобразует аргумент в строку, подходящую для использования в качестве текстовой константы в SQL-операторе; при этом для аргумента NULL возвращается строка
|
Переводит данное значение в текстовый вид и заключает в апострофы как текстовую строку, при этом для аргумента NULL возвращается строка
|
Возвращает количество вхождений регулярного выражения POSIX
|
Возвращает позицию в строке
|
Проверяет, есть ли в строке
|
Возвращает подстроки из первого вхождения регулярного выражения POSIX
|
Возвращает подстроки из первого вхождения регулярного выражения POSIX
{bar}
{baz} |
Заменяет подстроку первого вхождения регулярного выражения POSIX
|
Заменяет подстроку
|
Разделяет содержимое
|
Разделяет содержимое
hello world |
Возвращает подстроку
|
Повторяет содержимое
|
Заменяет все вхождения в
|
Переставляет символы в строке в обратном порядке.
|
Возвращает последние
|
Разделяет строку
|
Возвращает
|
Разделяет заданную параметром
|
Разделяет заданную параметром
xx NULL zz |
Возвращает начальную позицию первого вхождения
|
Извлекает из
|
Преобразует
|
Преобразует число в двоичное представление в дополнительном коде.
|
Преобразует число в шестнадцатеричное представление в дополнительном коде.
|
Преобразует число в восьмеричное представление в дополнительном коде.
|
Заменяет каждый символ в
|
Преобразует спецпоследовательности Unicode в аргументе. Символы Unicode могут быть заданы как Когда кодировка сервера — не UTF-8, символ с кодом, заданным этой спецпоследовательностью, преобразуется в фактическую кодировку сервера; если такое преобразование невозможно, выдаётся ошибка. Эта функция предоставляет (нестандартную) альтернативу строковым константам со спецпоследовательностями Unicode (см. Подраздел 4.1.2.3).
|
Функции concat, concat_ws и format принимают переменное число аргументов, так что им для объединения или форматирования можно передавать значения в виде массива, помеченного ключевым словом VARIADIC (см. Подраздел 36.5.6). Элементы такого массива обрабатываются, как если бы они были обычными аргументами функции. Если вместо массива в соответствующем аргументе передаётся NULL, функции concat и concat_ws возвращают NULL, а format воспринимает NULL как массив нулевого размера.
Также обратите внимание на агрегатную функцию string_agg в Разделе 9.21 и функции для преобразования текста в bytea и наоборот в Таблице 9.13.
9.4.1. format #
Функция format выдаёт текст, отформатированный в соответствии со строкой формата, подобно функции sprintf в C.
format(formatstrtext[,formatarg"any"[, ...] ])
formatstr — строка, определяющая, как будет форматироваться результат. Обычный текст в строке формата непосредственно копируется в результат, за исключением спецификаторов формата. Спецификаторы формата представляют собой местозаполнители, определяющие, как должны форматироваться и выводиться в результате аргументы функции. Каждый аргумент formatarg преобразуется в текст по правилам вывода своего типа данных, а затем форматируется и вставляется в результирующую строку согласно спецификаторам формата.
Спецификаторы формата предваряются символом % и имеют форму
%[position][flags][width]type
Здесь:
position(необязательный)Строка вида
, гдеn$n— индекс выводимог