# Substring `substring` извлекает часть текста. Эта функция полезна для очистки текста (или любого значения с [строковым типом данных](https://www.metabase.com/learn/databases/data-types-overview#Примерs-of-data-types)) имеет постоянный формат. Для примера `substring` должна хорошо работать со строками, такими как номера SKU, коды ISO и стандартизированные адреса электронной почты. | Синтаксис | Пример | |---------------------------------------------------------------------------------------------------|---------------------------------------| | `substring(text, position, length)` | `substring("user_id@email.com", 1, 7)`| | Извлекает часть текста с заданной начальной точкой (положением) и длиной (количеством символов). | "user_id" | ## Параметры - Первый символ в вашей строке находится в позиции 1. - Длина вашей подстроки всегда должна быть положительным числом. ## Получение подстроки слева | ID Миссии | Агент | |--------------|-------| | 19951113006 | 006 | | 20061114007 | 007 | | 19640917008 | 008 | **Агент** — это настраиваемый столбец с выражением: ``` substring([Mission ID], 9, 3) ``` ## Получение подстроки справа Вместо того, чтобы использовать число для позиции, вы будете использовать формулу ``` 1 + length([column]) - position_from_right ``` где `position_from_right` — это количество символов, которые вы хотите считать справа налево. | ID Миссии | Агент | |-------------|-------| | 19951113006 | 006 | | 20061114007 | 007 | | 19640917008 | 008 | Здесь **Агент** — это настраиваемый столбец с выражением: ``` substring([Mission ID], (1 + length([Mission ID]) - 3), 3) ``` ## Допустимые типы данных | [Тип данынх](https://www.metabase.com/learn/databases/data-types-overview#Примерs-of-data-types) | Работает с `substring` | | ----------------------- | -------------------- | | Строка | ✅ | | Число | ❌ | | Дата Время | ❌ | | Условие | ❌ | | JSON | ❌ | ## Ограничения `substring` извлекает текст, подсчитывая фиксированное количество символов. Если вам нужно извлечь текст на основе более сложной логики, попробуйте [`regexextract`](../expressions-list.md#regexextract). А если вам нужно только убрать лишние пробелы вокруг текста, вы можете использовать [Трим](../expressions-list.md#trim), [Левый_трим](../expressions-list.md #lefttrim) или выражения [Правый_трим](../expressions-list.md#righttrim). ## Связанные функции В этом разделе рассматриваются функции и формулы, которые работают так же, как выражение `substring` GlarusBI, с примечаниями о том, как выбрать лучший вариант для вашего случая использования. **[Выражения GlarusBI](../expressions-list.md)** - [Вытянуть текст](#regexextract) **Другие инструменты** - [SQL](#sql) - [Таблицы](#spreadsheets) - [Python](#python) ### Вытянуть текст Используйте [regexextract](./regexextract.md), если вам нужно извлечь текст на основе более конкретных правил. Например, вы можете получить идентификатор агента с шаблоном регулярного выражения, который находит последнее вхождение «00» (и все после него): ``` regexextract([Mission ID], ".+(00.+)$") ``` should return the same result as ``` substring([Mission ID], 9, 3) ``` ### SQL Когда вы задаете вопрос с помощью [редактора блокнота](https://www.metabase.com/glossary/notebook_editor), GlarusBI преобразует ваши графические настройки запроса (фильтры, сводки и т. д.) в запрос и запускает этот запрос. против вашей базы данных, чтобы получить ваши результаты. Если наши [примеры данных](#getting-a-substring-from-the-left) хранятся в базе данных PostgreSQL: ```sql SELECT mission_id, SUBSTRING(mission_id, 9, 3) AS agent FROM this_message_will_self_destruct; ``` равно выражению GlarusBI `substring`: ``` substring([Mission ID], 9, 3) ``` ### Таблицы Если наши [примеры данных](#getting-a-substring-from-the-left) находятся в электронной таблице, где «ID миссии» находится в столбце A, ``` =mid(A2,9,3) ``` равно выражению GlarusBI `substring`: ``` substring([Mission ID], 9, 3) ``` ### Python Предполагая, что [образец данных](#getting-a-substring-from-the-left) находится в столбце фрейма данных с именем `df`, ``` df['Agent'] = df['Mission ID'].str.slice(8, 11) ``` равно выражению GlarusBI `substring`: ``` substring([Mission ID], 9, 3) ``` ## Дополнительная информация - [Документация по кастомным выражениям](../expressions.md) - [Руководство по кастомным выражениям. Документация Metabase](https://www.metabase.com/learn/questions/custom-expressions)