Skip to content

Строковые функции ​

Работа с текстом: обрезка, склейка, поиск подстроки, смена регистра. Пригодятся, когда значение из источника нужно привести к читаемому виду или собрать из нескольких полей подпись для виджета.

Примеры считаются на демо-датасете «Продажи»: заказы, товары и покупатели. Разрез — категория товара, если не сказано иное.

Не все функции доезжают до источника

В режиме прямого запроса формула переводится в SQL вашей базы, и часть функций в её диалекте отсутствует. У таких ниже стоит строка «В прямом запросе…» с перечнем баз, на которых расчёт не соберётся. Oracle, Firebird и Trino в этот перечень не входят: на них в прямом запросе не строится большинство виджетов — поддержка функций источниками.

Функции, которые считает платформа ​

Семь функций — CHAR, SPACE, SPLIT, REGEXP_MATCH, REGEXP_EXTRACT, REGEXP_EXTRACT_NTH, REGEXP_REPLACE — исполняет не источник, а сама платформа поверх готового результата выборки. Поэтому у них общее ограничение:

  • их нельзя положить внутрь агрегата: MAX(REGEXP_EXTRACT(…)) отвечает отказом;
  • их нельзя использовать в фильтре, группировке и сортировке.

Иначе платформе пришлось бы забрать из источника все строки без ограничения. Применяйте такие функции к уже агрегированному значению — снаружи агрегата формула работает на любой базе.

CHAR ​

CHAR( code )

Символ по коду Unicode.

Пример.

CHAR(MAX([orders.quantity]) + 1000)

Код 1005 даёт символ ϭ. Практическое применение — собрать перевод строки (CHAR(10)) или неразрывный пробел в подписи.

Считается на стороне платформы: только снаружи агрегата — MAX(CHAR(…)) ответит отказом, CHAR(MAX(…)) сработает. Почему — функции, которые считает платформа.

CONCAT ​

CONCAT( a, b, … )

Объединяет аргументы в одну строку.

Пример.

CONCAT([products.category], " — ", [customers.city])

Результат — «Компьютеры — Новосибирск».

В прямом запросе не работает на: Vertica, MS SQL Server.

CONTAINS ​

CONTAINS( string, substr )

Истина, если строка содержит подстроку.

Пример.

MAX(CONTAINS([products.product_name], 'Сумка'))

У категории «Аксессуары» результат 1 — товар с таким словом в названии есть. Проверка чувствительна к регистру: «сумка» ничего не найдёт, для поиска без регистра берите ICONTAINS.

В прямом запросе не работает на: MS SQL Server.

ENDSWITH ​

ENDSWITH( string, suffix )

Истина, если строка заканчивается суффиксом.

Пример.

MAX(ENDSWITH([products.category], 'ы'))

1 у «Аксессуаров» и «Компьютеров», 0 у «Мобильных устройств» и «Периферии».

В прямом запросе не работает на: MS SQL Server.

FIND ​

FIND( string, substr [, start ] )

Позиция подстроки в строке.

Пример.

MAX(FIND([products.product_name], 'а'))

Позиция первой буквы «а»: у «Аксессуаров» — 7. Отсчёт с единицы; если подстроки нет, возвращается 0.

В прямом запросе не работает на: MS SQL Server.

ICONTAINS ​

ICONTAINS( string, substr )

CONTAINS без учёта регистра.

Пример.

MAX(ICONTAINS([products.product_name], 'сумка'))

1 у «Аксессуаров» — в отличие от CONTAINS, строчная «сумка» находит товар «Сумка для ноутбука».

В прямом запросе не работает на: MS SQL Server.

IENDSWITH ​

IENDSWITH( string, suffix )

ENDSWITH без учёта регистра.

Пример.

MAX(IENDSWITH([products.category], 'Ы'))

1 у «Аксессуаров» и «Компьютеров»: заглавная «Ы» в шаблоне совпадает со строчной в данных.

В прямом запросе не работает на: MS SQL Server.

ISTARTSWITH ​

ISTARTSWITH( string, prefix )

STARTSWITH без учёта регистра.

Пример.

MAX(ISTARTSWITH([products.product_name], 'сумка'))

1 у «Аксессуаров» — регистр первой буквы не важен.

В прямом запросе не работает на: MS SQL Server.

LEFT ​

LEFT( string, n )

Первые n символов строки.

Пример.

MAX(LEFT([products.product_name], 5))

Первые пять символов названия — «Сумка». Пригодится, когда в названии зашит код и нужна только его голова.

LEN ​

LEN( string )

Длина строки в символах.

Пример.

MAX(LEN([products.product_name]))

Самое длинное название в категории: 18 символов у «Аксессуаров», 21 у «Компьютеров». Считаются символы, а не байты, — кириллица не удваивается.

В прямом запросе не работает на: MS SQL Server.

LOWER ​

LOWER( string )

Переводит в нижний регистр.

Пример.

LOWER([products.category])

«Аксессуары» превращается в «аксессуары». Нужно, когда одни и те же значения приходят из источника в разном регистре и иначе попадают в разные группы.

LTRIM ​

LTRIM( string )

Убирает пробелы слева.

Пример.

MAX(LTRIM([products.category]))

На чистых демо-данных результат совпадает с исходным значением. Функция нужна для выгрузок, где значения выровнены пробелами.

REGEXP_EXTRACT ​

REGEXP_EXTRACT( string, pattern )

Первое совпадение с регулярным выражением; без совпадения — NULL.

Пример.

REGEXP_EXTRACT(MAX([products.product_name]), '[А-Яа-я]+')

Первое слово названия: «Сумка» у «Аксессуаров», «Рабочая» у «Компьютеров».

Считается на стороне платформы: только снаружи агрегата — MAX(REGEXP_EXTRACT(…)) ответит отказом, REGEXP_EXTRACT(MAX(…)) сработает. Почему — функции, которые считает платформа.

REGEXP_EXTRACT_NTH ​

REGEXP_EXTRACT_NTH( string, pattern, n )

n-е совпадение с регулярным выражением, нумерация с единицы.

Пример.

REGEXP_EXTRACT_NTH(MAX([products.product_name]), '[А-Яа-я]+', 2)

Второе слово названия: «для» у «Аксессуаров» (Сумка для ноутбука), «станция» у «Компьютеров» (Рабочая станция).

Считается на стороне платформы: только снаружи агрегата — MAX(REGEXP_EXTRACT_NTH(…)) ответит отказом, REGEXP_EXTRACT_NTH(MAX(…)) сработает. Почему — функции, которые считает платформа.

REGEXP_MATCH ​

REGEXP_MATCH( string, pattern )

Истина, если в строке найдено совпадение с регулярным выражением.

Пример.

REGEXP_MATCH(MAX([products.product_name]), '^Сумка.*')

True у «Аксессуаров», False у остальных. Обратите внимание: эта функция отвечает словами True/False, тогда как CONTAINS и STARTSWITH — числами 1/0.

Считается на стороне платформы: только снаружи агрегата — MAX(REGEXP_MATCH(…)) ответит отказом, REGEXP_MATCH(MAX(…)) сработает. Почему — функции, которые считает платформа.

REGEXP_REPLACE ​

REGEXP_REPLACE( string, pattern, repl )

Заменяет все вхождения; ссылка на группу — \1.

Пример.

REGEXP_REPLACE(MAX([products.category]), '[аеиоуыэюя]', '.')

Гласные заменяются точками: «Аксессуары» → Акс.сс..р..

Считается на стороне платформы: только снаружи агрегата — MAX(REGEXP_REPLACE(…)) ответит отказом, REGEXP_REPLACE(MAX(…)) сработает. Почему — функции, которые считает платформа.

REPLACE ​

REPLACE( string, from, to )

Замена всех вхождений подстроки.

Пример.

MAX(REPLACE([products.category], 'ы', 'Ы'))

«Аксессуары» → «АксессуарЫ». Заменяются все вхождения, а не первое.

RIGHT( string, n )

Последние n символов строки.

Пример.

MAX(RIGHT([products.product_name], 4))

Последние четыре символа названия: «дные» у «Аксессуаров». Зеркальная пара к LEFT.

В прямом запросе не работает на: MS SQL Server.

RTRIM ​

RTRIM( string )

Убирает пробелы справа.

Пример.

MAX(RTRIM([products.category]))

На демо-данных значение не меняется — пробелов по краям в них нет. Функция нужна для выгрузок из систем, где текст дополнен до фиксированной длины.

SPACE ​

SPACE( n )

Строка из n пробелов.

Пример.

CONCAT('a', SPACE(MAX([orders.quantity])), 'b')

При количестве 5 между буквами встают пять пробелов: a b. Применяется для выравнивания в выгрузках с моноширинным шрифтом.

Считается на стороне платформы: только снаружи агрегата — MAX(SPACE(…)) ответит отказом, SPACE(MAX(…)) сработает. Почему — функции, которые считает платформа.

SPLIT ​

SPLIT( string, delimiter, n )

n-я часть строки; отрицательный номер отсчитывается с конца.

Пример.

SPLIT(MAX([products.product_name]), ' ', 2)

Второе слово названия: «для» у «Аксессуаров», «станция» у «Компьютеров». Номер -1 дал бы последнее слово.

Считается на стороне платформы: только снаружи агрегата — MAX(SPLIT(…)) ответит отказом, SPLIT(MAX(…)) сработает. Почему — функции, которые считает платформа.

STARTSWITH ​

STARTSWITH( string, prefix )

Истина, если строка начинается с префикса.

Пример.

MAX(STARTSWITH([products.product_name], 'Сумка'))

1 у «Аксессуаров». Регистр учитывается — для проверки без него берите ISTARTSWITH.

В прямом запросе не работает на: MS SQL Server.

SUBSTR ​

SUBSTR( string, from [, len ] )

Подстрока с позиции from.

Пример.

MAX(SUBSTR([products.product_name], 1, 6))

Шесть символов с начала: Сумка у «Аксессуаров» — вместе с пробелом. Отсчёт позиций начинается с единицы.

TRIM ​

TRIM( string )

Убирает пробелы по краям.

Пример.

MAX(TRIM([products.category]))

Делает то же, что LTRIM и RTRIM вместе. Ставьте её перед группировкой, если источник отдаёт значения с невидимыми пробелами: иначе «Москва» и «Москва » станут двумя разными строками отчёта.

UPPER ​

UPPER( string )

Переводит в верхний регистр.

Пример.

MAX(UPPER([products.category]))

«Аксессуары» → «АКСЕССУАРЫ».

UTF8 ​

UTF8( string )

Перекодирует строку в UTF-8.

Источник пока не исполняет эту функцию

Формула сохранится, а выборка ответит отказом «Функция … пока не поддержана».

Что дальше ​