В данном разделе описываются функции и операторы, предназначенные для анализа и обработки строковых значений. Под строками в данном контексте понимаются значения
типов character, character varying,
и text. За исключением особо оговоренных случаев, данные функции и операторы определены для приема и возврата значений типа text. Они будут
взаимозаменяемо принимать character varying аргументы.
Значения типа character будут преобразованы
к типу text перед применением функции или оператора, что приводит к удалению всех завершающих пробелов в character значении.
SQL определяет ряд строковых функций, в которых для разделения аргументов используются ключевые слова, а не запятые. Подробные сведения приведены в Таблица 2.6.9. Digital Q.DataBase также предоставляются версии данных функций, использующие стандартный синтаксис вызова функций (см. Таблица 2.6.10).
Оператор конкатенации строк (||) принимает
входные данные нестроковых типов при условии, что по крайней мере один входной аргумент имеет строковый тип, как показано
в Таблица 2.6.9. В остальных случаях для обеспечения поддержки нестроковых входных данных может использоваться явное приведение к text , позволяющее принимать входные данные нестроковых типов.
Таблица 2.6.9. Строковые функции и операторы SQL
Функция/оператор Описание Примеры |
|---|
|
Выполняет конкатенацию двух строк.
|
Преобразует нестроковое входное значение в текст, после чего выполняет конкатенацию двух
строк. (Входное значение нестрокового типа не может быть массивом, так как
это привело бы к неоднозначности с операторами
|
Удаляет наиболее длинную подстроку, состоящую исключительно из указанных символов,
в
|
Проверяет, приведена ли строка к указанной форме нормализации Unicode
форма. Необязательное
|
|
Возвращает количество бит в строке (в 8
раз больше
|
Функция возвращает количество символов в строке.
|
|
Данная функция переводит строку в нижний регистр согласно правилам локали базы данных.
|
Функция дополняет строку
|
Удаляет наиболее длинную подстроку, состоящую только из символов, указанных в
|
Преобразует строку в указанную форму нормализации
Unicode. Необязательное
|
Возвращает количество байт в строке.
|
Данная функция возвращает количество байт в строке. Поскольку данная версия
функции принимает тип данных
|
Данная функция заменяет подстроку в
|
Возвращает первый начальный индекс указанной подстроки
|
Функция дополняет строку
|
Удаляет наиболее длинную подстроку, состоящую только из символов, указанных в
|
Данная операция извлекает подстроку из
|
Данная операция извлекает первую подстроку, соответствующую регулярному выражению POSIX; см. Раздел 2.6.7.3.
|
Извлекает первую подстроку, соответствующую SQL регулярному выражению; см. Раздел 2.6.7.2. Первая форма была определена в стандарте языка SQL:2003; вторая форма присутствовала только в стандарте языка SQL:1999 и должна считаться устаревшей.
|
Удаляет наиболее длинную подстроку, состоящую только из символов, указанных в
|
Данный синтаксис не является стандартным для
|
Возвращает значение |
|
Преобразует все символы строки в верхний регистр согласно правилам локали базы данных.
|
Дополнительные функции и операторы для обработки строк доступны и перечислены в Таблица 2.6.10. (Некоторые из этих средств используются во внутренних механизмах для реализации оператора SQL-стандартных строковых функций, перечисленных в Таблица 2.6.9.) Также существуют операторы сопоставления с шаблоном, описание которых приведено в Раздел 2.6.7, и операторы для полнотекстового поиска, описанные в Глава 2.9.
Таблица 2.6.10. Прочие строковые функции и операторы
Функция/оператор Описание Примеры |
|---|
|
Возвращает логическое значение true, если первая строка начинается со второй строки
(эквивалентно функции
|
|
Возвращает числовой код первого символа аргумента. В UTF8 кодировке возвращает кодовую точку Unicode символа. В других многобайтовых кодировках аргумент должен быть ASCII символ.
|
|
Возвращает символ с заданным кодом. В UTF8
кодировке UTF-8 аргумент рассматривается как кодовая точка Unicode. В других
многобайтовых кодировках аргумент должен представлять
символ ASCII. ASCII символ.
|
Выполняет объединение текстовых представлений всех переданных аргументов. Аргументы со значением NULL игнорируются.
|
Выполняет конкатенацию всех аргументов, кроме первого, с использованием разделителей. При этом первый аргумент используется в качестве строки разделителя и не должен иметь значение NULL. Прочие аргументы со значением NULL игнорируются.
|
Форматирует аргументы в соответствии со строкой форматирования;
см. Раздел 2.6.4.1.
Данная функция аналогична функции языка C
|
|
Преобразует первую букву каждого слова в верхний регистр, а остальные — в нижний. Слова представляют собой последовательности буквенно-цифровых символов, разделенных символами, не являющимися буквенно-цифровыми.
|
Возвращает первые n
|
|
Возвращает количество символов в строке.
|
|
Вычисляет хеш-сумму по алгоритму MD5 хеш-сумма для аргумента; результат возвращается в шестнадцатеричном виде.
|
Разбивает строку
|
|
Возвращает название текущей кодировки клиентской части.
|
|
Возвращает заданную строку, заключенную в кавычки, для использования в качестве идентификатора в строке SQL-запроса. Кавычки добавляются только при необходимости (например, если строка содержит символы, отличные от символов идентификатора, или если она была бы приведена к нижнему регистру). Вложенные кавычки корректно дублируются. См. также Пример 5.6.1.
|
|
Функция возвращает заданную строку с соответствующими кавычками для её использования в качестве строкового литерала
в строке SQL-запроса.
Входящие в состав строки одиночные кавычки и обратные косые черты корректно дублируются.
Обратите внимание, что
|
Функция преобразует заданное значение в текстовый вид, а затем заключает его в кавычки как литерал. Входящие в состав строки одиночные кавычки и обратные косые черты корректно дублируются.
|
Функция возвращает заданную строку с соответствующими кавычками для её использования в качестве строкового литерала
в SQL-операторе, или, если аргумент
имеет значение null, возвращает
|
Функция преобразует заданное значение в текст и заключает его в кавычки как литерал;
или, если аргумент имеет значение null, возвращает
|
Возвращает количество совпадений, которые регулярное выражение
стандарта POSIX
|
Возвращает позицию в строке,
|
Проверяет, имеется ли совпадение с регулярным выражением стандарта POSIX
стандарта POSIX
|
Возвращает подстроки, соответствующие первому совпадению регулярного выражения в стандарте POSIX
стандарта POSIX
|
Возвращает подстроки, соответствующие первому совпадению регулярного выражения в стандарте POSIX
стандарта POSIX
{bar}
{baz}
|
Заменяет подстроку, соответствующую первому совпадению регулярного выражения
в стандарте POSIX
|
Заменяет подстроку, представляющую собой
|
Разбивает строку
|
Разбивает строку
привет мир
|
Возвращает подстроку, входящую в строку,
|
Повторяет строку
|
Заменяет все вхождения в строке
|
|
Меняет порядок символов в строке на обратный.
|
Возвращает последние n
|
Разбивает строку
|
Возвращает значение true, если
|
Разделяет строку
|
Разделяет строку
xx NULL zz
|
Возвращает индекс первого вхождения указанной подстроки
|
Данная операция извлекает подстроку из
|
Выполняет преобразование
|
|
Преобразует число в его эквивалентное двоичное представление в дополнительном коде.
|
|
Преобразует число в эквивалентное шестнадцатеричное значение в дополнительном коде коде.
|
|
Преобразует число в эквивалентное восьмеричное значение в дополнительном коде коде.
|
Заменяет каждый символ в строке,
|
|
Выполняет интерпретацию экранированных последовательностей Unicode в аргументе. Символы Unicode
могут быть заданы как
Если кодировка сервера отличается от UTF-8, то определяемая кодовая точка Unicode посредством одной из этих escape-последовательностей, преобразуется в кодировку сервера encoding; в противном случае генерируется ошибка. Данная функция предоставляет (нестандартную) альтернативу строковым константам с Unicode-последовательностями (см. Раздел 2.1.1.2.3).
|
Данный concat, concat_ws и
format функции являются вариативными, поэтому значения для конкатенации или форматирования можно передавать в виде массива, помеченного ключевым словом VARIADIC keyword (see Раздел 5.1.5.6). Элементы массива обрабатываются как отдельные обычные аргументы функции. Если вариативный аргумент-массив принимает значение NULL, то concat
и concat_ws возвращают оператор IS NULL, однако
format интерпретирует значение NULL как массив с нулевым количеством элементов.
См. также агрегатную функцию string_agg in
Раздел 2.6.21, а также функций для преобразования между строковыми данными и bytea в
Таблица 2.6.13.
format #
Функция format формирует выходные данные в соответствии со строкой форматирования в стиле, аналогичном функции языка C
sprintf.
format(formatstrtext[,аргумент_форматирования"any"[, ...] ])
formatstr — это строка форматирования, которая определяет способ представления полученного результата. Текст в строке форматирования копируется непосредственно в результирующую строку, за исключением тех мест, где спецификаторы формата используются. Спецификаторы формата служат заполнителями в строке, определяя способ форматирования и вставки последующих аргументов функции в результат. Каждый аргумент_форматирования аргумент преобразуется в текстовый вид согласно стандартным правилам вывода для своего типа данных, после чего форматируется и вставляется в результирующую строку в соответствии со спецификатором формата.
Спецификаторы формата начинаются с символа % символ и имеют следующий вид
%[позиция][flags][ширина]тип
где составные поля имеют следующее значение:
позиция (необязательно)
Строка вида в которой
n$n является индексом аргумента, который необходимо вывести.
Индекс 1 соответствует первому аргументу после
formatstr. Если позиция не
пропущен, по умолчанию используется следующий по порядку аргумент.
flags (необязательно)
Дополнительные параметры, определяющие способ форматирования вывода
спецификатора. В настоящее время единственным поддерживаемым флагом является знак «минус»
(-), который обеспечивает выравнивание вывода спецификатора формата
по левому краю. Данный параметр не имеет эффекта, если также не указано ширина
поле ширины.
ширина (необязательно)
Определяет минимальное количество символов, используемых для
отображения результата спецификатора формата. Вывод дополняется
слева или справа (в зависимости от - наличия флага) пробелами,
необходимыми для заполнения всей ширины поля. Недостаточная ширина поля не приводит к
усечению вывода, а просто игнорируется. Ширина может быть
указывается с помощью одного из следующих значений: положительного целого числа;
символа звездочки (*) для использования следующего аргумента функции в качестве
ширины; или строки вида * для
используйте n$n-й аргумент функции в качестве значения ширины.
Если ширина определяется аргументом функции, этот аргумент
используется перед аргументом, предназначенным для значения
спецификатора формата. Если аргумент ширины имеет отрицательное значение, результат выравнивается
по левому краю (как если бы был задан - флаг) в пределах
поля длиной abs(ширина).
тип (обязательно)Тип преобразования, используемый для формирования вывода спецификатора формата. Поддерживаются следующие типы:
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');
Результат: Тестирование: один, два, три, %
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')
Ниже приведены примеры использования ширина полей
и - флага:
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 |
В данных примерах демонстрируется использование позиция полей:
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,
Digital Q.DataBase format функция format позволяет смешивать спецификаторы формата с указанием номера позиция сочетание полей в одной и той же строке форматирования. Спецификатор формата без указания номера
позиция поле всегда использует аргумент, следующий за последним использованным аргументом. Кроме того, format не требует обязательного использования всех своих аргументов в строке форматирования. Например:
SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
Результат: Testing three, two, three
%I и %L Спецификаторы формата особенно полезны для безопасного построения динамических операторов языка SQL. См.
Пример 5.6.1.