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

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

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

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

Table 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, если строка соответствует регулярному выражению.

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)

Поиск в строке без учета регистра, аналог LIKE.

notILike(haystack, pattern)

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

ngramDistance(haystack, needle)

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

ngramSearch(haystack, needle)

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

countSubstrings(haystack, needle)

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

countMatches(haystack, pattern)

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

regexpExtract(haystack, pattern[, index])

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

hasSubsequence(haystack, needle)

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