Функции для поиска в строках

Все функции в этом разделе по умолчанию осуществляют поиск с учетом регистра. Поиск без учета регистра обычно предоставляется отдельными вариантами функций. Обратите внимание, что поиск без учета регистра следует правилам перевода в нижний и верхний регистры английского языка. Например, прописной букве i в английском языке соответствует заглавная I, тогда как в турецком языке — заглавная İ. Результаты для языков, отличных от английского, могут быть неожиданными.

Функции в этом разделе также предполагают, что искомая строка и строка поиска кодируются текстом с однобайтовой кодировкой. В случае отклонения от этого предположения, система не генерирует исключений, и результат поиска остается неопределенным. Для работы со строками, закодированными в UTF-8, обычно предоставляются специализированные версии функций. Аналогично, использование функций, предназначенных для работы с UTF-8, с текстом, не закодированным в UTF-8, не приводит к генерации исключений, и результаты также остаются неопределенными. Обратите внимание, что автоматическая нормализация Unicode не выполняется, для этого можно использовать функции normalizeUTF8*().

Набор поддерживаемых функций RQL и их поведение зависят от версии установленного ClickHouse. Если функция не поддерживается в используемой версии ClickHouse, она также не будет доступна в RQL. Ознакомиться с актуальным списком функций и их поведением можно в официальном репозитории ClickHouse, выбрав нужную версию из веток. Например: список функций для поиска в строках для ClickHouse 24.7.

Таблица 1. Функции поиска в строках
Функция Описание

position(haystack, needle[, start_pos])

Возвращает позицию (в байтах, начиная с 1) подстроки needle в строке haystack.

positionCaseInsensitive(haystack, needle[, start_pos])

Поиск позиции подстроки в строке без учета регистра.

positionUTF8(haystack, needle[, start_pos])

Поиск позиции подстроки в UTF-8 строке.

positionCaseInsensitiveUTF8(haystack, needle[, start_pos])

Поиск позиции подстроки в UTF-8 строке без учета регистра.

multiSearchAllPositions(haystack, [needle1, needle2, …​, needleN])

Возвращает массив позиций для множества подстрок в строке.

multiSearchAllPositionsUTF8(haystack, [needle1, needle2, …​, needleN])

Поиск всех позиций множества подстрок в UTF-8 строке.

multiSearchFirstPosition(haystack, [needle1, needle2, …​, needleN])

Возвращает наименьшую позицию среди всех указанных подстрок в строке.

multiSearchFirstIndex(haystack, [needle1, needle2, …​, needleN])

Возвращает индекс первой найденной подстроки из списка в строке.

multiSearchAny(haystack, [needle1, needle2, …​, needleN])

Возвращает 1, если хотя бы одна из указанных подстрок найдена в строке, иначе 0.

match(haystack, pattern)

Возвращает true, если строка соответствует регулярному выражению в синтаксисе регулярных выражений re2.

multiMatchAny(haystack, [pattern1, pattern2, …​, patternN])

Проверяет соответствие строки хотя бы одному из регулярных выражений.

multiMatchAnyIndex(haystack, [pattern1, pattern2, …​, patternN])

Возвращает индекс регулярного выражения, которому соответствует строка.

multiMatchAllIndices(haystack, [pattern1, pattern2, …​, patternN])

Возвращает массив индексов всех регулярных выражений, которым соответствует строка.

multiFuzzyMatchAny(haystack, distance, [pattern1, pattern2, …​, patternN])

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

extract(haystack, pattern)

Извлекает фрагмент строки, соответствующий регулярному выражению.

extractAll(haystack, pattern)

Извлекает все фрагменты строки, соответствующие регулярному выражению.

extractAllGroupsHorizontal(haystack, pattern)

Возвращает массив массивов, где каждый массив содержит фрагменты строки, соответствующие каждой группе в регулярном выражении.

extractAllGroupsVertical(haystack, pattern)

Возвращает массив массивов, где каждый внутренний массив содержит фрагменты, соответствующие группам в порядке их появления в строке.

like(haystack, pattern)

Возвращает true, если строка соответствует шаблону выражения LIKE.

notLike(haystack, pattern)

Возвращает true, если строка не соответствует шаблону выражения LIKE.

ilike(haystack, pattern)

Возвращает true, если строка соответствует шаблону выражения LIKE без учета регистра.

notILike(haystack, pattern)

Возвращает true, если строка не соответствует шаблону выражения LIKE без учета регистра.

ngramDistance(haystack, needle)

Вычисляет расстояние между строками на основе 4-грамм.

ngramSearch(haystack, needle)

Похоже на ngramDistance, но вычисляет несимметричную разницу между строками.

countSubstrings(haystack, needle)

Возвращает количество вхождений подстроки в строку.

countMatches(haystack, pattern)

Возвращает количество совпадений регулярного выражения в строке.

regexpExtract(haystack, pattern[, index])

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

hasSubsequence(haystack, needle)

Возвращает 1, если подстрока является подпоследовательностью строки, иначе 0.

Шаблон может включать обычные символы и следующие метасимволы:

  • % — обозначает любое количество произвольных символов или отсутствие символов.

  • _ — обозначает один произвольный символ.

  • \ — используется для экранирования символов %, _ и \.