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

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

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

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

Ознакомиться с актуальным списком функций и их поведением можно в официальной документации ClickHouse.

Обратите внимание, что для функций в официальной документации ClickHouse может быть указана версия, в которой эти функции были введены. Это позволит определить, доступна ли рассматриваемая функция в вашей версии ClickHouse.

Функции поиска в строках
Функция Описание

countMatches(haystack, pattern)

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

countMatchesCaseInsensitive(haystack, pattern)

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

countSubstrings(haystack, needle[, start_pos])

Возвращает количество непересекающихся вхождений подстроки needle в строке haystack. Необязательный параметр start_pos задает позицию (начиная с 1), с которой нужно начать поиск.

countSubstringsCaseInsensitive(haystack, needle[, start_pos])

Возвращает количество непересекающихся вхождений подстроки needle в строке haystack без учета регистра. Необязательный параметр start_pos задает позицию (начиная с 1), с которой нужно начать поиск.

countSubstringsCaseInsensitiveUTF8(haystack, needle[, start_pos])

Возвращает количество непересекающихся вхождений подстроки needle в строке haystack в кодировке UTF-8 без учета регистра. Необязательный параметр start_pos задает позицию в символах (начиная с 1), с которой нужно начать поиск.

extract(haystack, pattern)

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

extractAll(haystack, pattern)

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

extractAllGroupsHorizontal(s, regexp)

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

extractGroups(s, regexp)

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

hasSubsequence(haystack, needle)

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

hasSubsequenceCaseInsensitive(haystack, needle)

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

hasSubsequenceCaseInsensitiveUTF8(haystack, needle)

Возвращает 1, если подстрока needle является подпоследовательностью строки haystack в кодировке UTF-8 без учета регистра, иначе — 0.

hasSubsequenceUTF8(haystack, needle)

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

hasToken(haystack, token)

Возвращает 1, если токен token содержится в строке haystack, иначе — 0. Токен определяется как непрерывная последовательность символов 0-9, A-Z, a-z и _.

hasTokenCaseInsensitive(haystack, token)

Возвращает 1, если токен token содержится в строке haystack без учета регистра, иначе — 0. Токен определяется как непрерывная последовательность символов 0-9, A-Z, a-z и _.

hasTokenCaseInsensitiveOrNull(haystack, token)

Возвращает 1, если токен token содержится в строке haystack без учета регистра, иначе — 0. Если переданный токен имеет неверный формат, то функция возвращает null. Токен определяется как непрерывная последовательность символов 0-9, A-Z, a-z и _.

hasTokenOrNull(haystack, token)

Возвращает 1, если токен token содержится в строке haystack, иначе — 0. Если переданный токен имеет неверный формат, то функция возвращает null. Токен определяется как непрерывная последовательность символов 0-9, A-Z, a-z и _.

ilike(haystack, pattern)

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

like(haystack, pattern)

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

locate(needle, haystack[, start_pos])

Возвращает позицию (в байтах, начиная с 1) подстроки needle в строке haystack. Если подстрока не найдена, возвращает 0. При необходимости можно задать начальную позицию поиска в параметре start_pos. Если подстрока needle пустая, функция возвращает start_pos (если параметр задан) или 1.

match(haystack, pattern)

REGEXP_MATCHES(haystack, pattern)

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

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

Выполняет нечеткий поиск регулярных выражений от pattern1 до patternN в строке haystack. Параметр distance задает максимальное редакционное расстояние для совпадения. Возвращает массив индексов (начиная с 1) всех совпавших шаблонов в произвольном порядке. Если совпадения не найдены, возвращает пустой массив.

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

Возвращает 1, если хотя бы один шаблон от pattern1 до patternN совпадает со строкой haystack с учетом редакционного расстояния distance, иначе — 0.

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

Выполняет нечеткий поиск регулярных выражений от pattern1 до patternN в строке haystack. Параметр distance задает максимальное редакционное расстояние для совпадения. Возвращает индекс (начиная с 1) произвольного совпавшего шаблона, иначе — 0.

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

Проверяет соответствие строки haystack хотя бы одному из шаблонов от pattern1 до patternN. Возвращает массив индексов (начиная с 1) всех шаблонов, которым соответствует строка, в произвольном порядке. Если совпадения не найдены, возвращает пустой массив.

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

Проверяет соответствие строки haystack хотя бы одному из шаблонов (pattern1, pattern2,…​). Возвращает 1, если есть хотя бы одно совпадение, иначе — 0.

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

Проверяет соответствие строки haystack хотя бы одному из шаблонов от pattern1 до patternN. Возвращает индекс (начиная с 1) произвольного шаблона, которому соответствует строка. Если не найдено ни одно совпадение, возвращает 0.

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

Ищет позиции подстрок (needle1, needle2, …​) в строке haystack. Возвращает массив начальных позиций (в байтах, начиная с 1) для каждой подстроки в порядке их перечисления. Если подстрока не найдена, для нее возвращается 0.

multiSearchAllPositionsCaseInsensitive(haystack, needle1[, needle2, …​])

Ищет позиции подстрок (needle1, needle2, …​) в строке haystack без учета регистра. Возвращает массив начальных позиций (в байтах, начиная с 1) для каждой подстроки в порядке их перечисления. Если подстрока не найдена, для нее возвращается 0.

multiSearchAllPositionsCaseInsensitiveUTF8(haystack, needle1[, needle2, …​])

Ищет позиции подстрок (needle1, needle2, …​) в строке haystack в кодировке UTF-8 без учета регистра. Возвращает массив начальных позиций (в байтах, начиная с 1) для каждой подстроки в порядке их перечисления. Если подстрока не найдена, для нее возвращается 0.

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

Ищет позиции подстрок (needle1, needle2, …​) в строке haystack в кодировке UTF-8. Возвращает массив начальных позиций (в байтах, начиная с 1) для каждой подстроки в порядке их перечисления. Если подстрока не найдена, для нее возвращается 0.

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

Проверяет, содержит ли строка haystack хотя бы одну из указанных подстрок (needle1, needle2, …​). Возвращает 1, если есть хотя бы одно совпадение, иначе — 0.

multiSearchAnyCaseInsensitive(haystack, needle1[, needle2, …​])

Проверяет, содержит ли строка haystack хотя бы одну из указанных подстрок (needle1, needle2, …​) без учета регистра. Возвращает 1, если есть хотя бы одно совпадение, иначе — 0.

multiSearchAnyCaseInsensitiveUTF8(haystack, needle1[, needle2, …​])

Проверяет, содержит ли строка haystack в кодировке UTF-8 хотя бы одну из указанных подстрок (needle1, needle2, …​) без учета регистра. Возвращает 1, если есть хотя бы одно совпадение, иначе — 0.

multiSearchAnyUTF8(haystack, needle1[, needle2, …​])

Проверяет, содержит ли строка haystack в кодировке UTF-8 хотя бы одну из указанных подстрок (needle1, needle2, …​). Возвращает 1, если есть хотя бы одно совпадение, иначе — 0.

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

Выполняет поиск нескольких подстрок от needle1 до needleN в исходной строке haystack. Возвращает индекс (начиная с 1) самой первой найденной подстроки. Если совпадения не найдены, возвращает 0.

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

Выполняет поиск нескольких подстрок от needle1 до needleN в исходной строке haystack без учета регистра. Возвращает индекс (начиная с 1) самой первой найденной подстроки. Если совпадения не найдены, возвращает 0.

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

Выполняет поиск нескольких подстрок от needle1 до needleN в исходной строке haystack в кодировке UTF-8 без учета регистра. Возвращает индекс (начиная с 1) самой первой найденной подстроки. Если совпадения не найдены, возвращает 0.

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

Выполняет поиск нескольких подстрок от needle1 до needleN в исходной строке haystack в кодировке UTF-8. Возвращает индекс (начиная с 1) самой первой найденной подстроки. Если совпадения не найдены, возвращает 0.

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

Находит смещение от начала строки haystack до начала самой первой из найденных подстрок (needle1, needle2, …​). Возвращает смещение в байтах (начиная с 1). Если ни одна подстрока не найдена, возвращает 0.

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

Находит смещение от начала строки haystack до начала самой первой из найденных подстрок от needle1 до needleN без учета регистра. Возвращает смещение в байтах (начиная с 1). Если ни одна подстрока не найдена, возвращает 0.

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

Находит смещение от начала строки haystack в кодировке UTF-8 до начала самой первой из найденных подстрок от needle1 до needleN без учета регистра. Возвращает смещение в байтах (начиная с 1). Если ни одна подстрока не найдена, возвращает 0.

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

Находит смещение от начала строки haystack в кодировке UTF-8 до начала самой первой из найденных подстрок от needle1 до needleN. Возвращает смещение в байтах (начиная с 1). Если ни одна подстрока не найдена, возвращает 0.

ngramDistance(haystack, needle)

Вычисляет расстояние по 4-граммам между строками haystack и needle и возвращает его значение в диапазоне от 0 до 1. Чем больше похожи строки, тем меньше возвращаемое значение.

ngramDistanceCaseInsensitive(haystack, needle)

Вычисляет расстояние по 4-граммам между строками haystack и needle без учета регистра и возвращает его значение в диапазоне от 0 до 1. Чем больше похожи строки, тем меньше возвращаемое значение.

ngramDistanceCaseInsensitiveUTF8(haystack, needle)

Вычисляет расстояние по 3-граммам между строками haystack и needle в кодировке UTF-8 без учета регистра и возвращает его значение в диапазоне от 0 до 1. Чем больше похожи строки, тем меньше возвращаемое значение.

ngramDistanceUTF8(haystack, needle)

Вычисляет расстояние по 3-граммам между строками haystack и needle в кодировке UTF-8 и возвращает его значение в диапазоне от 0 до 1. Чем больше похожи строки, тем меньше возвращаемое значение.

ngramSearch(haystack, needle)

Проверяет, что расстояние по 4-граммам между строками haystack и needle меньше либо равно заданному порогу 1.0. Возвращает 1, если условие выполняется, иначе — 0.

ngramSearchCaseInsensitive(haystack, needle)

Проверяет, что расстояние по 4-граммам между строками haystack и needle без учета регистра меньше либо равно заданному порогу 1.0. Возвращает 1, если условие выполняется, иначе — 0.

ngramSearchCaseInsensitiveUTF8(haystack, needle)

Проверяет, что расстояние по 3-граммам между строками haystack и needle в кодировке UTF-8 без учета регистра меньше либо равно заданному порогу 1.0. Возвращает 1, если условие выполняется, иначе — 0.

ngramSearchUTF8(haystack, needle)

Проверяет, что расстояние по 3-граммам между строками haystack и needle в кодировке UTF-8 меньше либо равно заданному порогу 1.0. Возвращает 1, если условие выполняется, иначе — 0.

notILike(haystack, pattern)

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

notLike(haystack, pattern)

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

position(haystack, needle[, start_pos])

Возвращает позицию (в байтах, начиная с 1) подстроки needle в строке haystack. Если подстрока не найдена, возвращает 0. При необходимости можно задать начальную позицию поиска в параметре start_pos. Если подстрока needle пустая, функция возвращает start_pos (если параметр задан) или 1.

positionCaseInsensitive(haystack, needle[, start_pos])

instr(haystack, needle[, start_pos])

Возвращает позицию (в байтах, начиная с 1) подстроки needle в строке haystack без учета регистра. Если подстрока не найдена, возвращает 0. При необходимости можно задать начальную позицию поиска в параметре start_pos. Если подстрока needle пустая, функция возвращает start_pos (если параметр задан) или 1.

positionCaseInsensitiveUTF8(haystack, needle[, start_pos])

Возвращает позицию (в байтах, начиная с 1) подстроки needle в строке haystack в кодировке UTF-8 без учета регистра. Если подстрока не найдена, возвращает 0. При необходимости можно задать начальную позицию поиска в параметре start_pos. Если подстрока needle пустая, функция возвращает start_pos (если параметр задан) или 1.

positionUTF8(haystack, needle[, start_pos])

Возвращает позицию (в байтах, начиная с 1) подстроки needle в строке haystack в кодировке UTF-8. Если подстрока не найдена, возвращает 0. При необходимости можно задать начальную позицию поиска в параметре start_pos. Если подстрока needle пустая, функция возвращает start_pos (если параметр задан) или 1.

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

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

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

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

Была ли полезна эта страница?

Обратная связь