9.4. Функции и операторы строк#
9.4. Функции и операторы строк #
Этот раздел описывает функции и операторы для изучения и
манипулирования строковыми значениями. Строки в этом контексте включают значения
типов character
, character varying
,
и text
. За исключением указанных случаев, эти функции и операторы
объявлены для принятия и возврата типа text
. Они
могут принимать аргументы типа character varying
.
Значения типа character
будут преобразованы
в text
перед применением функции или оператора, что приведет
к удалению любых конечных пробелов в значении типа character
.
SQL определяет некоторые строковые функции, которые используют ключевые слова, а не запятые, для разделения аргументов. Подробности приведены в разделе Таблица 9.9. Tantor BE также предоставляет версии этих функций, которые используют обычный синтаксис вызова функций (см. раздел Таблица 9.10).
Примечание
Оператор конкатенации строк (||
) принимает нестроковые значения, если хотя бы один из входных параметров имеет тип строка, как показано в разделе Таблица 9.9. В других случаях можно использовать явное приведение к типу text
, чтобы принять нестроковые значения.
Таблица 9.9. Функции и операторы строк SQL
Функция/Оператор Описание Пример(ы) |
---|
Сцепляет две строки.
|
Преобразует нестроковый ввод в текст, а затем объединяет две строки. (Нестроковый ввод не может быть массивом, потому что это создало бы неоднозначность с операторами
|
Удаляет самую длинную строку, содержащую только символы из
|
Проверяет, находится ли строка в указанной форме нормализации Юникода. Опциональное ключевое слово
|
Возвращает количество битов в строке (8 раз
|
Возвращает количество символов в строке.
|
Преобразует строку в нижний регистр в соответствии с правилами локали базы данных.
|
Расширяет
|
Удаляет самую длинную строку, содержащую только символы из
|
Преобразует строку в указанную форму нормализации Unicode. Опциональное ключевое слово
|
Возвращает количество байтов в строке.
|
Возвращает количество байтов в строке. Поскольку эта версия функции принимает тип
|
Заменяет подстроку
|
Возвращает первый индекс начала указанной подстроки
|
Расширяет
|
Удаляет самую длинную строку, содержащую только символы из
|
Извлекает подстроку из
|
Извлекает первую подстроку, соответствующую POSIX регулярному выражению; см. Раздел 9.7.3.
|
Извлекает первую подстроку, соответствующую регулярному выражению SQL; см. Раздел 9.7.2. Первая форма была определена с SQL:2003; вторая форма была только в SQL:1999 и должна считаться устаревшей.
|
Удаляет самую длинную строку, содержащую только символы из
|
Это нестандартный синтаксис для функции
|
Преобразует строку в верхний регистр в соответствии с правилами локали базы данных.
|
Дополнительные функции и операторы для работы со строками доступны и перечислены в Таблица 9.10. (Некоторые из них используются внутренне для реализации стандартных строковых функций SQL, перечисленных в Таблица 9.9). Также существуют операторы сопоставления с образцом, которые описаны в Раздел 9.7, и операторы для полнотекстового поиска, которые описаны в Глава 12.
Таблица 9.10. Другие функции и операторы строк
Функция/Оператор Описание Пример(ы) |
---|
Возвращает true, если первая строка начинается со второй строки (эквивалентно функции
|
Возвращает числовой код первого символа аргумента. В кодировке UTF8 возвращает кодовую точку Unicode символа. В других многобайтовых кодировках аргумент должен быть символом ASCII.
|
Возвращает символ с заданным кодом. В кодировке UTF8 аргумент рассматривается как кодовая точка Unicode. В других многобайтовых кодировках аргумент должен обозначать символ ASCII.
|
Конкатенирует текстовые представления всех аргументов. Аргументы NULL игнорируются.
|
Конкатенирует все аргументы, кроме первого, с помощью разделителей. Первый аргумент используется в качестве строки-разделителя и не должен быть NULL. Другие NULL-аргументы игнорируются.
|
Форматирует аргументы в соответствии с форматной строкой;
см. Раздел 9.4.1.
Эта функция аналогична функции
|
Преобразует первую букву каждого слова в верхний регистр, а остальные - в нижний регистр. Слова представляют собой последовательности буквенно-цифровых символов, разделенных не буквенно-цифровыми символами.
|
Возвращает первые
|
Возвращает количество символов в строке.
|
Вычисляет hash MD5-хеш аргумента, с результатом, записанным в шестнадцатеричном формате.
|
Разделяет
|
Возвращает текущее имя кодировки клиента.
|
Возвращает заданную строку в виде идентификатора, подходящего для использования в строке оператора SQL. Кавычки добавляются только при необходимости (т.е. если строка содержит символы, не являющиеся идентификаторами, или если она будет приведена к нижнему регистру). Встроенные кавычки правильно удваиваются. См. также Пример 40.1.
|
Возвращает заданную строку в правильно оформленном виде с кавычками для использования в качестве строкового литерала в выражении SQL. Встроенные апострофы и обратные косые черты корректно удваиваются. Обратите внимание, что функция
|
Преобразует заданное значение в текст и затем заключает его в кавычки как литерал. Встроенные апострофы и обратные косые черты правильно удваиваются.
|
Возвращает заданную строку в правильно оформленном виде с кавычками для использования в качестве строкового литерала в строке оператора SQL; или, если аргумент равен null, возвращает
|
Преобразует заданное значение в текст и затем заключает его в кавычки в виде литерала;
или, если аргумент равен null, возвращает
|
Возвращает количество совпадений с шаблоном POSIX регулярного выражения
|
Возвращает позицию внутри
|
Проверяет, существует ли совпадение с POSIX регулярным выражением
|
Возвращает подстроки внутри первого совпадения с POSIX регулярным выражением
|
Возвращает подстроки внутри первого совпадения с POSIX регулярным выражением
{bar} {baz}
|
Заменяет подстроку, которая является первым совпадением с POSIX
регулярным выражением
|
Заменяет подстроку, которая является
|
Разделяет
|
Разделяет
hello world
|
Возвращает подстроку внутри
|
Повторяет
|
Заменяет все вхождения подстроки
|
Обращает порядок символов в строке.
|
Возвращает последние
|
Разделяет
|
Возвращает true, если
|
Сплитит строку
|
Разделяет
xx NULL zz
|
Возвращает первый индекс начала указанной подстроки
|
Извлекает подстроку из
|
Преобразует
|
Преобразует число в его эквивалентное шестнадцатеричное представление.
|
Заменяет каждый символ в строке
|
Оцените экранированные символы Юникода в аргументе. Символы Юникода можно указать как Если кодировка сервера не UTF-8, кодовая точка Unicode, идентифицируемая одной из этих последовательностей экранирования, преобразуется в фактическую кодировку сервера; если это невозможно, выдается ошибка. Эта функция предоставляет (нестандартную) альтернативу строковым константам с использованием экранирующих символов Unicode (см. Раздел 4.1.2.3).
|
Функции concat
, concat_ws
и
format
являются вариативными, поэтому возможно
передавать значения для конкатенации или форматирования в виде массива, помеченного
ключевым словом VARIADIC
(см. Раздел 35.5.6). Элементы массива
обрабатываются так, как если бы они были отдельными обычными аргументами функции.
Если вариативный аргумент-массив равен NULL, concat
и concat_ws
возвращают NULL, но
format
рассматривает NULL как массив с нулевым количеством элементов.
См. также агрегатную функцию string_agg
в
Раздел 9.21, а также функции для
преобразования между строками и типом bytea
в
Таблица 9.13.
9.4.1. format
#
Функция format
производит вывод, отформатированный в соответствии с
строкой формата, в стиле, аналогичном функции C
sprintf
.
format
(formatstr
text
[,formatarg
"any"
[, ...] ])
formatstr
- это строка формата, которая определяет, как должен быть отформатирован результат. Текст в строке формата копируется непосредственно в результат, за исключением случаев, когда используются спецификаторы формата. Спецификаторы формата действуют как заполнители в строке, определяя, как следующие аргументы функции должны быть отформатированы и вставлены в результат. Каждый аргумент formatarg
преобразуется в текст в соответствии с обычными правилами вывода для его типа данных, а затем форматируется и вставляется в строку результата в соответствии с спецификатором(ами) формата.
Форматные спецификаторы вводятся символом %
и имеют следующую форму
%[position
][flags
][width
]type
где поля компонента являются:
position
(optional)Строка вида
, гдеn
$n
- это индекс аргумента для печати. Индекс 1 означает первый аргумент послеformatstr
. Еслиposition
не указан, то используется следующий аргумент в последовательности.flags
(optional)Дополнительные параметры, управляющие форматированием вывода спецификатора формата. В настоящее время поддерживается только флаг минус (
-
), который приведет к выравниванию вывода спецификатора формата по левому краю. Это не имеет эффекта, если также не указано полеwidth
.width
(optional)Определяет минимальное количество символов, используемых для отображения вывода форматирующего спецификатора. Вывод выравнивается слева или справа (в зависимости от флага
-
) с использованием пробелов, если это необходимо для заполнения ширины. Слишком маленькая ширина не приводит к обрезанию вывода, а просто игнорируется. Ширина может быть указана следующими способами: положительное целое число; звездочка (*
), чтобы использовать следующий аргумент функции в качестве ширины; или строка вида*
, чтобы использоватьn
$n
-ый аргумент функции в качестве ширины.Если ширина берется из аргумента функции, этот аргумент потребляется перед аргументом, который используется для значения спецификатора формата. Если аргумент ширины отрицательный, результат выравнивается по левому краю (как если бы был указан флаг
-
) в пределах поля длинойabs
(width
).type
(required)Тип преобразования формата, используемый для создания вывода спецификатора формата. Поддерживаются следующие типы:
s
форматирует значение аргумента как простую строку. Значение null рассматривается как пустая строка.I
обрабатывает значение аргумента как идентификатор SQL, заключая его в двойные кавычки при необходимости. Ошибка будет возникать, если значение равно NULL (эквивалентноquote_ident
).L
цитирует значение аргумента как SQL-литерал. Значение null отображается как строкаNULL
, без кавычек (эквивалентноquote_nullable
).
В дополнение к описанным выше спецификаторам формата, можно использовать специальную последовательность %%
для вывода символа процента %
в тексте.
Вот несколько примеров базовых преобразований формата:
SELECT format('Hello %s', 'World'); Результат:Hello World
SELECT format('Testing %s, %s, %s, %%', 'one', 'two', 'three'); Результат:Testing one, two, three, %
SELECT format('INSERT INTO %I VALUES(%L)', 'Foo bar', E'O\'Reilly'); Результат:INSERT INTO "Foo bar" VALUES('O''Reilly')
SELECT format('INSERT INTO %I VALUES(%L)', 'locations', 'C:\Program Files'); Результат:INSERT INTO locations VALUES('C:\Program Files')
Вот примеры использования полей width
и флага -
:
SELECT format('|%10s|', 'foo'); Результат:| foo|
SELECT format('|%-10s|', 'foo'); Результат:|foo |
SELECT format('|%*s|', 10, 'foo'); Результат:| foo|
SELECT format('|%*s|', -10, 'foo'); Результат:|foo |
SELECT format('|%-*s|', 10, 'foo'); Результат:|foo |
SELECT format('|%-*s|', -10, 'foo'); Результат:|foo |
Эти примеры показывают использование полей position
:
SELECT format('Testing %3$s, %2$s, %1$s', 'one', 'two', 'three'); Результат:Testing three, two, one
SELECT format('|%*2$s|', 'foo', 10, 'bar'); Результат:| bar|
SELECT format('|%1$*2$s|', 'foo', 10, 'bar'); Результат:| foo|
В отличие от стандартной функции C sprintf
,
функция format
в Tantor BE позволяет смешивать форматные спецификаторы с и без поля position
в одной строке формата. Форматный спецификатор без поля position
всегда использует следующий аргумент после последнего использованного аргумента.
Кроме того, функция format
не требует использования всех аргументов функции в строке формата.
Например:
SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
Результат:Testing three, two, three
Спецификаторы формата %I
и %L
особенно полезны для безопасного создания динамических SQL-запросов. См. пример в разделе Пример 40.1.