Перейти к основному содержимому
Перейти к основному содержимому

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

Все функции в этом разделе по умолчанию ищут с учетом регистра. Поиск без учета регистра обычно обеспечивается отдельными вариантами функций.

примечание

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

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

Общие функции для строк и функции для замены в строках описаны отдельно.

position

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

Синтаксис

Псевдоним:

  • position(needle IN haystack)

Аргументы

  • haystack — Строка, в которой выполняется поиск. Строка или Enum.
  • needle — Подстрока, которую нужно найти. Строка.
  • start_pos – Позиция (с единичным началом) в haystack, с которой начинается поиск. UInt. Необязательный.

Возвращаемое значение

  • Начальная позиция в байтах, считая с 1, если подстрока найдена. UInt64.
  • 0, если подстрока не найдена. UInt64.

Если подстрока needle пуста, применяются следующие правила:

  • если start_pos не указан: вернуть 1
  • если start_pos = 0: вернуть 1
  • если start_pos >= 1 и start_pos <= length(haystack) + 1: вернуть start_pos
  • в противном случае: вернуть 0

Тем же правилам подчиняются функции locate, positionCaseInsensitive, positionUTF8 и positionCaseInsensitiveUTF8.

Примеры

Запрос:

Результат:

Пример с аргументом start_pos:

Запрос:

Результат:

Пример синтаксиса needle IN haystack:

Запрос:

Результат:

Примеры с пустой подстрокой needle:

Запрос:

Результат:

locate

Как и position, но аргументы haystack и locate поменяны местами.

Поведение этой функции зависит от версии ClickHouse:

  • в версиях < v24.3, locate был псевдонимом функции position и принимал аргументы (haystack, needle[, start_pos]).
  • в версиях >= 24.3, locate - это отдельная функция (для лучшей совместимости с MySQL) и принимает аргументы (needle, haystack[, start_pos]). Предыдущее поведение можно восстановить, используя настройку function_locate_has_mysql_compatible_argument_order = false;

Синтаксис

positionCaseInsensitive

Не чувствительный к регистру вариант position.

Пример

Запрос:

Результат:

positionUTF8

Как и position, но предполагает, что haystack и needle закодированы в UTF-8.

Примеры

Функция positionUTF8 правильно считает символ ö (представляемый двумя точками) как один кодовой момент Unicode:

Запрос:

Результат:

positionCaseInsensitiveUTF8

Как и positionUTF8, но ищет без учета регистра.

multiSearchAllPositions

Как и position, но возвращает массив позиций (в байтах, начиная с 1) для нескольких подстрок needle в строке haystack.

примечание

Все функции multiSearch*() поддерживают до 28 needles.

Синтаксис

Аргументы

  • haystack — Строка, в которой выполняется поиск. Строка.
  • needle — Подстроки, которые нужно найти. Массив.

Возвращаемое значение

  • Массив начальной позиции в байтах, считая с 1, если подстрока найдена.
  • 0, если подстрока не найдена.

Пример

Запрос:

Результат:

multiSearchAllPositionsCaseInsensitive

Как multiSearchAllPositions, но игнорирует регистр.

Синтаксис

Параметры

  • haystack — Строка, в которой выполняется поиск. Строка.
  • needle — Подстроки, которые нужно найти. Массив.

Возвращаемое значение

  • Массив начальной позиции в байтах, считая с 1 (если подстрока найдена).
  • 0, если подстрока не найдена.

Пример

Запрос:

Результат:

multiSearchAllPositionsUTF8

Как multiSearchAllPositions, но предполагает, что строки haystack и needle закодированы в UTF-8.

Синтаксис

Параметры

  • haystack — UTF-8 строка, в которой выполняется поиск. Строка.
  • needle — UTF-8 подстроки, которые нужно найти. Массив.

Возвращаемое значение

  • Массив начальной позиции в байтах, считая с 1 (если подстрока найдена).
  • 0, если подстрока не найдена.

Пример

Зgiven ClickHouse как строка UTF-8, найдите позиции C (\x43) и H (\x48).

Запрос:

Результат:

multiSearchAllPositionsCaseInsensitiveUTF8

Как multiSearchAllPositionsUTF8, но игнорирует регистр.

Синтаксис

Параметры

  • haystack — UTF-8 строка, в которой выполняется поиск. Строка.
  • needle — UTF-8 подстроки, которые нужно найти. Массив.

Возвращаемое значение

  • Массив начальной позиции в байтах, считая с 1 (если подстрока найдена).
  • 0, если подстрока не найдена.

Пример

Зgiven ClickHouse как строка UTF-8, найдите позиции c (\x63) и h (\x68).

Запрос:

Результат:

multiSearchFirstPosition

Как position, но возвращает левосторонний смещение в строке haystack, которое соответствует любому из множества строк needle.

Функции multiSearchFirstPositionCaseInsensitive, multiSearchFirstPositionUTF8 и multiSearchFirstPositionCaseInsensitiveUTF8 предоставляют варианты этой функции, которые игнорируют регистр и/илиUTF-8.

Синтаксис

Параметры

  • haystack — Строка, в которой выполняется поиск. Строка.
  • needle — Подстроки, которые нужно найти. Массив.

Возвращаемое значение

  • Левосторонний смещение в строке haystack, которое соответствует любой из множества строк needle.
  • 0, если не было найдено совпадений.

Пример

Запрос:

Результат:

multiSearchFirstPositionCaseInsensitive

Как multiSearchFirstPosition, но игнорирует регистр.

Синтаксис

Параметры

  • haystack — Строка, в которой выполняется поиск. Строка.
  • needle — Массив подстрок, которые нужно найти. Массив.

Возвращаемое значение

  • Левосторонний смещение в строке haystack, которое соответствует любой из множества строк needle.
  • 0, если не было найдено совпадений.

Пример

Запрос:

Результат:

multiSearchFirstPositionUTF8

Как multiSearchFirstPosition, но предполагает, что haystack и needle - это строки UTF-8.

Синтаксис

Параметры

  • haystack — UTF-8 строка, в которой выполняется поиск. Строка.
  • needle — Массив UTF-8 подстрок, которые нужно найти. Массив.

Возвращаемое значение

  • Левосторонний смещение в строке haystack, которое соответствует любой из множества строк needle.
  • 0, если не было найдено совпадений.

Пример

Найдите левостороннее смещение в UTF-8 строке hello world, которое соответствует любой из заданных подстрок.

Запрос:

Результат:

multiSearchFirstPositionCaseInsensitiveUTF8

Как multiSearchFirstPosition, но предполагает, что haystack и needle - это UTF-8 строки и игнорирует регистр.

Синтаксис

Параметры

  • haystack — UTF-8 строка, в которой выполняется поиск. Строка.
  • needle — Массив UTF-8 подстрок, которые нужно найти. Массив.

Возвращаемое значение

  • Левосторонний смещение в строке haystack, которое соответствует любой из множества строк needle, игнорируя регистр.
  • 0, если не было найдено совпадений.

Пример

Найдите левостороннее смещение в UTF-8 строке HELLO WORLD, которое соответствует любой из заданных подстрок.

Запрос:

Результат:

multiSearchFirstIndex

Возвращает индекс i (начиная с 1) первой найденной подстроки needle<sub>i</sub> в строке haystack и 0 в противном случае.

Функции multiSearchFirstIndexCaseInsensitive, multiSearchFirstIndexUTF8 и multiSearchFirstIndexCaseInsensitiveUTF8 предоставляют варианты, игнорирующие регистр и/или UTF-8.

Синтаксис

Параметры

  • haystack — Строка, в которой выполняется поиск. Строка.
  • needle — Подстроки, которые нужно найти. Массив.

Возвращаемое значение

  • индекс (начиная с 1) первой найденной подстроки. В противном случае 0, если не было найдено совпадений. UInt8.

Пример

Запрос:

Результат:

multiSearchFirstIndexCaseInsensitive

Возвращает индекс i (начиная с 1) первой найденной подстроки needle<sub>i</sub> в строке haystack и 0 в противном случае. Игнорирует регистр.

Синтаксис

Параметры

  • haystack — Строка, в которой выполняется поиск. Строка.
  • needle — Подстроки, которые нужно найти. Массив.

Возвращаемое значение

  • индекс (начиная с 1) первой найденной подстроки. В противном случае 0, если не было найдено совпадений. UInt8.

Пример

Запрос:

Результат:

multiSearchFirstIndexUTF8

Возвращает индекс i (начиная с 1) первой найденной подстроки needle<sub>i</sub> в строке haystack и 0 в противном случае. Предполагает, что haystack и needle - это строки, закодированные в UTF-8.

Синтаксис

Параметры

  • haystack — UTF-8 строка, в которой выполняется поиск. Строка.
  • needle — Массив UTF-8 подстрок, которые нужно найти. Массив.

Возвращаемое значение

  • индекс (начиная с 1) первой найденной подстроки. В противном случае 0, если не было найдено совпадений. UInt8.

Пример

Учитывая Hello World как UTF-8 строку, найдите первый индекс строк UTF-8 Hello и World.

Запрос:

Результат:

multiSearchFirstIndexCaseInsensitiveUTF8

Возвращает индекс i (начиная с 1) первой найденной подстроки needle<sub>i</sub> в строке haystack и 0 в противном случае. Предполагает, что haystack и needle - это строки, закодированные в UTF-8. Игнорирует регистр.

Синтаксис

Параметры

  • haystack — UTF-8 строка, в которой выполняется поиск. Строка.
  • needle — Массив UTF-8 подстрок, которые нужно найти. Массив.

Возвращаемое значение

  • индекс (начиная с 1) первой найденной подстроки. В противном случае 0, если не было найдено совпадений. UInt8.

Пример

Учитывая HELLO WORLD как UTF-8 строку, найдите первый индекс строк UTF-8 hello и world.

Запрос:

Результат:

multiSearchAny

Возвращает 1, если хотя бы одна строка needle<sub>i</sub> соответствует строке haystack, и 0 в противном случае.

Функции multiSearchAnyCaseInsensitive, multiSearchAnyUTF8 и multiSearchAnyCaseInsensitiveUTF8 предоставляют варианты, игнорирующие регистр и/или UTF-8.

Синтаксис

Параметры

  • haystack — Строка, в которой выполняется поиск. Строка.
  • needle — Подстроки, которые нужно найти. Массив.

Возвращаемое значение

  • 1, если есть хотя бы одно совпадение.
  • 0, если нет ни одного совпадения.

Пример

Запрос:

Результат:

multiSearchAnyCaseInsensitive

Как multiSearchAny, но игнорирует регистр.

Синтаксис

Параметры

  • haystack — Строка, в которой выполняется поиск. Строка.
  • needle — Подстроки, которые нужно найти. Массив

Возвращаемое значение

  • 1, если есть хотя бы одно совпадение без учета регистра.
  • 0, если нет ни одного совпадения без учета регистра.

Пример

Запрос:

Результат:

multiSearchAnyUTF8

Как multiSearchAny, но предполагает, что haystack и подстроки needle закодированы в UTF-8.

Синтаксис

Параметры

  • haystack — UTF-8 строка, в которой выполняется поиск. Строка.
  • needle — UTF-8 подстроки, которые нужно найти. Массив.

Возвращаемое значение

  • 1, если есть хотя бы одно совпадение.
  • 0, если нет ни одного совпадения.

Пример

Учитывая ClickHouse как строку UTF-8, проверьте, есть ли буквы C ('\x43') или H ('\x48') в слове.

Запрос:

Результат:

multiSearchAnyCaseInsensitiveUTF8

Как multiSearchAnyUTF8, но игнорирует регистр.

Синтаксис

Параметры

  • haystack — UTF-8 строка, в которой выполняется поиск. Строка.
  • needle — UTF-8 подстроки, которые нужно найти. Массив

Возвращаемое значение

  • 1, если есть хотя бы одно совпадение без учета регистра.
  • 0, если нет ни одного совпадения без учета регистра.

Пример

Учитывая ClickHouse как строку UTF-8, проверьте, есть ли буква h(\x68) в слове, игнорируя регистр.

Запрос:

Результат:

match

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

Совпадение основывается на UTF-8, например, . соответствует кодовой точке Unicode ¥, которая представлена в UTF-8 с использованием двух байтов. Регулярное выражение не должно содержать нулевых байтов. Если строка или шаблон не являются допустимыми UTF-8, поведение неопределено.

В отличие от поведения по умолчанию re2, . соответствует разрывам строк. Чтобы отключить это, добавьте к шаблону (?-s).

Если вы хотите искать только подстроки в строке, вы можете использовать функции like или position - они работают гораздо быстрее, чем эта функция.

Синтаксис

Псевдоним: haystack REGEXP pattern operator

multiMatchAny

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

примечание

Функции в семействе multi[Fuzzy]Match*() используют библиотеку (Vectorscan)[https://github.com/VectorCamp/vectorscan]. Таким образом, они активированы только если ClickHouse скомпилирован с поддержкой vectorscan.

Чтобы отключить все функции, использующие hyperscan, используйте установку SET allow_hyperscan = 0;.

Из-за ограничений vectorscan длина строки haystack должна быть менее 232 байтов.

Hyperscan, как правило, уязвим для атак отказа в обслуживании регулярными выражениями (ReDoS) (например, смотрите (здесь)[https://www.usenix.org/conference/usenixsecurity22/presentation/turonova], (здесь)[https://doi.org/10.1007/s10664-021-10033-1] и (здесь)[https://doi.org/10.1145/3236024.3236027]. Пользователям советуют тщательно проверять предоставленные шаблоны.

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

Синтаксис

multiMatchAnyIndex

Как multiMatchAny, но возвращает любой индекс, который соответствует haystack.

Синтаксис

multiMatchAllIndices

Как multiMatchAny, но возвращает массив всех индексов, которые соответствуют haystack в любом порядке.

Синтаксис

multiFuzzyMatchAny

Как multiMatchAny, но возвращает 1, если какой-либо шаблон совпадает с haystack в пределах фиксированного редакционного расстояния. Эта функция зависит от экспериментальной функции библиотеки hyperscan и может быть медленной для некоторых крайних случаев. Производительность зависит от значения редакционного расстояния и использованных шаблонов, но она всегда дороже по сравнению с неразмытыми вариантами.

примечание

Функции multiFuzzyMatch*() не поддерживают регулярные выражения UTF-8 (они рассматривают их как последовательность байтов) из-за ограничений hyperscan.

Синтаксис

multiFuzzyMatchAnyIndex

Как multiFuzzyMatchAny, но возвращает любой индекс, который соответствует haystack в пределах фиксированного редакционного расстояния.

Синтаксис

multiFuzzyMatchAllIndices

Как multiFuzzyMatchAny, но возвращает массив всех индексов в любом порядке, которые соответствуют haystack в пределах фиксированного редакционного расстояния.

Синтаксис

extract

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

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

Синтаксис

Аргументы

Возвращаемое значение

  • Первое совпадение регулярного выражения в строке haystack. Строка.

Пример

Запрос:

Результат:

extractAll

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

Поведение по отношению к подшаблонам такое же, как в функции extract.

Синтаксис

Аргументы

Возвращаемое значение

  • Массив совпадений регулярного выражения в строке haystack. Массив(Строка).

Пример

Запрос:

Результат:

extractAllGroupsHorizontal

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

Эта функция медленнее, чем extractAllGroupsVertical.

Синтаксис

Аргументы

Возвращаемое значение

  • Массив массивов совпадений. Массив.
примечание

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

Пример

Результат:

extractGroups

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

Синтаксис

Аргументы

Возвращаемое значение

  • Массив массивов совпадений. Массив.

Пример

Результат:

extractAllGroupsVertical

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

Синтаксис

Аргументы

Возвращаемое значение

  • Массив массивов совпадений. Массив.
примечание

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

Пример

Результат:

like

Возвращает истинное значение, если строка haystack соответствует выражению LIKE pattern.

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

  • % указывает на произвольное количество произвольных символов (включая ноль символов).
  • _ указывает на один произвольный символ.
  • \ используется для экранирования литералов %, _ и \.

Сопоставление основано на UTF-8, например, _ соответствует кодовой точки Unicode ¥, которая представлена в UTF-8 с использованием двух байтов.

Если haystack или выражение LIKE не являются допустимыми UTF-8, поведение не определено.

Автоматическая нормализация Unicode не выполняется, вы можете использовать функции normalizeUTF8*() для этого.

Чтобы сопоставить с литералом %, _ и \ (которые являются метасимволами LIKE), предшествуйте им обратной косой чертой: \%, \_ и \\. Обратная косая черта теряет свое специальное значение (т. е. интерпретируется литерално), если она предшествует символу, отличному от %, _ или \. Обратите внимание, что ClickHouse требует, чтобы обратные косые черты в строках также были экранированы, поэтому вам на самом деле нужно писать \\%, \\_ и \\\\.

Для выражений LIKE вида %needle% функция работает так же быстро, как функция position. Все остальные выражения LIKE внутренне преобразуются в регулярное выражение и выполняются с производительностью, аналогичной функции match.

Синтаксис

Псевдоним: haystack LIKE pattern (оператор)

notLike

Как like, но отрицает результат.

Псевдоним: haystack NOT LIKE pattern (оператор)

ilike

Как like, но выполняет поиск без учета регистра.

Псевдоним: haystack ILIKE pattern (оператор)

notILike

Как ilike, но отрицает результат.

Псевдоним: haystack NOT ILIKE pattern (оператор)

ngramDistance

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

Функции ngramDistanceCaseInsensitive, ngramDistanceUTF8, ngramDistanceCaseInsensitiveUTF8 предоставляют варианты этой функции без учета регистра и/или для UTF-8.

Синтаксис

Параметры

Возвращаемое значение

  • Значение от 0 до 1, представляющееSimilarity между двумя строками. Float32

Детали реализации

Эта функция выбросит исключение, если постоянные аргументы needle или haystack превышают 32 Кб в размере. Если любые непостоянные аргументы haystack или needle превышают 32 Кб в размере, то расстояние всегда будет равно 1.

Примеры

Чем более похожи две строки друг на друга, тем ближе результат будет к 0 (идентично).

Запрос:

Результат:

Чем менее похожи две строки, тем больше будет результат.

Запрос:

Результат:

ngramDistanceCaseInsensitive

Предоставляет вариант ngramDistance без учета регистра.

Синтаксис

Параметры

Возвращаемое значение

  • Значение от 0 до 1, представляющееSimilarity между двумя строками. Float32

Примеры

С ngramDistance различия в регистре влияют на значение схожести:

Запрос:

Результат:

С ngramDistanceCaseInsensitive регистр игнорируется, так что две идентичные строки, отличающиеся только регистром, теперь вернут низкое значение схожести:

Запрос:

Результат:

ngramDistanceUTF8

Предоставляет вариант ngramDistance для строк, закодированных в UTF-8.

Синтаксис

Параметры

Возвращаемое значение

  • Значение от 0 до 1, представляющееSimilarity между двумя строками. Float32

Пример

Запрос:

Результат:

ngramDistanceCaseInsensitiveUTF8

Предоставляет вариант без учета регистра для ngramDistanceUTF8.

Синтаксис

Параметры

Возвращаемое значение

  • Значение от 0 до 1, представляющееSimilarity между двумя строками. Float32

Пример

Запрос:

Результат:

ngramSearch

Как ngramDistance, но вычисляет несимметричную разность между строкой needle и строкой haystack, т. е. количество n-граммов из needle минус общее количество n-граммов, нормализованное по количеству n-граммов needle. Возвращает Float32 в диапазоне от 0 до 1. Чем больше результат, тем более вероятно, что needle находится в haystack. Эта функция полезна для нечеткого поиска строк. Также смотрите функцию soundex.

Функции ngramSearchCaseInsensitive, ngramSearchUTF8, ngramSearchCaseInsensitiveUTF8 предоставляют варианты этой функции без учета регистра и/или для UTF-8.

Синтаксис

Параметры

Возвращаемое значение

  • Значение от 0 до 1, представляющее вероятность того, что needle находится в haystack. Float32

Детали реализации

примечание

Варианты UTF-8 используют расстояние 3-граммы. Эти расстояния не являются абсолютно справедливыми n-граммами. Мы используем 2-байтовые хеши для хеширования n-грамм, а затем рассчитываем (не-)симметричную разность между этими таблицами хешей - коллизии могут происходить. В формате UTF-8 без учета регистра мы не используем честную функцию tolower - мы обнуляем 5-й бит (начиная с нуля) каждого байта кодовой точки и первый бит нулевого байта, если байтов больше одного - это работает для латиницы и в основном для всех кириллических букв.

Пример

Запрос:

Результат:

ngramSearchCaseInsensitive

Предоставляет вариант без учета регистра для ngramSearch.

Синтаксис

Параметры

Возвращаемое значение

  • Значение от 0 до 1, представляющее вероятность того, что needle находится в haystack. Float32

Чем больше результат, тем более вероятно, что needle находится в haystack.

Пример

Запрос:

Результат:

ngramSearchUTF8

Предоставляет вариант ngramSearch, где needle и haystack предполагается закодированными в UTF-8.

Синтаксис

Параметры

Возвращаемое значение

  • Значение от 0 до 1, представляющее вероятность того, что needle находится в haystack. Float32

Чем больше результат, тем более вероятно, что needle находится в haystack.

Пример

Запрос:

Результат:

ngramSearchCaseInsensitiveUTF8

Предоставляет вариант без учета регистра для ngramSearchUTF8, в котором предполагается, что needle и haystack.

Синтаксис

Параметры

Возвращаемое значение

  • Значение от 0 до 1, представляющее вероятность того, что needle находится в haystack. Float32

Чем больше результат, тем более вероятно, что needle находится в haystack.

Пример

Запрос:

Результат:

countSubstrings

Возвращает, сколько раз подстрока needle встречается в строке haystack.

Функции countSubstringsCaseInsensitive и countSubstringsCaseInsensitiveUTF8 предоставляют незамедлительные и незамедлительные + UTF-8 варианты этой функции соответственно.

Синтаксис

Аргументы

  • haystack — Строка, в которой выполняется поиск. Строка или Enum.
  • needle — Подстрока, которую нужно ищет. Строка.
  • start_pos – Позиция (с 1) в haystack, с которой начинается поиск. UInt. Необязательный.

Возвращаемое значение

  • Количество вхождений. UInt64.

Примеры

Результат:

Пример с аргументом start_pos:

Результат:

countSubstringsCaseInsensitive

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

Синтаксис

Аргументы

  • haystack — Строка, в которой выполняется поиск. Строка или Enum.
  • needle — Подстрока, которую нужно ищет. Строка.
  • start_pos – Позиция (с 1) в haystack, с которой начинается поиск. UInt. Необязательный.

Возвращаемое значение

  • Количество вхождений. UInt64.

Примеры

Запрос:

Результат:

Пример с аргументом start_pos:

Запрос:

Результат:

countSubstringsCaseInsensitiveUTF8

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

Синтаксис

Аргументы

  • haystack — Строка UTF-8, в которой выполняется поиск. Строка или Enum.
  • needle — Подстрока, которую нужно ищет. Строка.
  • start_pos – Позиция (с 1) в haystack, с которой начинается поиск. UInt. Необязательный.

Возвращаемое значение

  • Количество вхождений. UInt64.

Примеры

Запрос:

Результат:

Пример с аргументом start_pos:

Запрос:

Результат:

countMatches

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

Синтаксис

Аргументы

Возвращаемое значение

  • Количество совпадений. UInt64.

Примеры

Результат:

Результат:

countMatchesCaseInsensitive

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

Синтаксис

Аргументы

Возвращаемое значение

  • Количество совпадений. UInt64.

Примеры

Запрос:

Результат:

regexpExtract

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

Синтаксис

Псевдоним: REGEXP_EXTRACT(haystack, pattern[, index]).

Аргументы

  • haystack — Строка, в которой будет совпадать шаблон регулярного выражения. Строка.
  • pattern — Строка, регулярное выражение, должно быть постоянным. Строка.
  • index – Целое число, большее или равное 0 с умолчанием 1. Это представляет, какую группу regex извлечь. UInt или Int. Необязательный.

Возвращаемое значение

pattern может содержать несколько групп регулярных выражений, индекс указывает, какую группу регулярного выражения извлечь. Индекс 0 означает совпадение с полным регулярным выражением. Строка.

Примеры

Результат:

hasSubsequence

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

Синтаксис

Аргументы

  • haystack — Строка, в которой выполняется поиск. Строка.
  • needle — Подпоследовательность, которую нужно искать. Строка.

Возвращаемое значение

  • 1, если needle является подпоследовательностью haystack, 0 в противном случае. UInt8.

Примеры

Запрос:

Результат:

hasSubsequenceCaseInsensitive

Как hasSubsequence, но ищет без учета регистра.

Синтаксис

Аргументы

  • haystack — Строка, в которой выполняется поиск. Строка.
  • needle — Подпоследовательность, которую нужно искать. Строка.

Возвращаемое значение

  • 1, если needle является подпоследовательностью haystack, 0 в противном случае. UInt8.

Примеры

Запрос:

Результат:

hasSubsequenceUTF8

Как hasSubsequence, но предполагает, что haystack и needle являются строками в кодировке UTF-8.

Синтаксис

Аргументы

  • haystack — Строка, в которой выполняется поиск. Закодированная в UTF-8 Строка.
  • needle — Подпоследовательность, которую нужно искать. Закодированная в UTF-8 Строка.

Возвращаемое значение

  • 1, если needle является подпоследовательностью haystack, 0 в противном случае. UInt8.

Запрос:

Примеры

Результат:

hasSubsequenceCaseInsensitiveUTF8

Как hasSubsequenceUTF8, но ищет без учета регистра.

Синтаксис

Аргументы

  • haystack — Строка, в которой выполняется поиск. Закодированная в UTF-8 Строка.
  • needle — Подпоследовательность, которую нужно искать. Закодированная в UTF-8 Строка.

Возвращаемое значение

  • 1, если needle является подпоследовательностью haystack, 0 в противном случае. UInt8.

Примеры

Запрос:

Результат:

hasToken

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

Синтаксис

Параметры

  • haystack: Строка, в которой выполняется поиск. Строка или Enum.
  • token: Подстрока максимальной длины между двумя неалфавитными символами ASCII (или границами haystack).

Возвращаемое значение

  • 1, если токен присутствует в haystack, 0 в противном случае. UInt8.

Детали реализации

Токен должен быть постоянной строкой. Поддерживается специализацией индекса tokenbf_v1.

Пример

Запрос:

hasTokenOrNull

Возвращает 1, если данный токен присутствует, 0, если не присутствует, и null, если токен имеет некорректный формат.

Синтаксис

Параметры

  • haystack: Строка, в которой выполняется поиск. Строка или Enum.
  • token: Подстрока максимальной длины между двумя неалфавитными символами ASCII (или границами haystack).

Возвращаемое значение

  • 1, если токен присутствует в haystack, 0, если он отсутствует, и null, если токен имеет некорректный формат.

Детали реализации

Токен должен быть постоянной строкой. Поддерживается специализацией индекса tokenbf_v1.

Пример

Где hasToken выбросит ошибку для некорректного токена, hasTokenOrNull вернет null для некорректного токена.

Запрос:

hasTokenCaseInsensitive

Возвращает 1, если данный токен присутствует в haystack, 0 в противном случае. Игнорирует регистр.

Синтаксис

Параметры

  • haystack: Строка, в которой выполняется поиск. Строка или Enum.
  • token: Подстрока максимальной длины между двумя неалфавитными символами ASCII (или границами haystack).

Возвращаемое значение

  • 1, если токен присутствует в haystack, 0 в противном случае. UInt8.

Детали реализации

Токен должен быть постоянной строкой. Поддерживается специализацией индекса tokenbf_v1.

Пример

Запрос:

hasTokenCaseInsensitiveOrNull

Возвращает 1, если данный токен присутствует в haystack, 0 в противном случае. Игнорирует регистр и возвращает null, если токен имеет некорректный формат.

Синтаксис

Параметры

  • haystack: Строка, в которой выполняется поиск. Строка или Enum.
  • token: Подстрока максимальной длины между двумя неалфавитными символами ASCII (или границами haystack).

Возвращаемое значение

  • 1, если токен присутствует в haystack, 0, если токен отсутствует, иначе null если токен имеет некорректный формат. UInt8.

Детали реализации

Токен должен быть постоянной строкой. Поддерживается специализацией индекса tokenbf_v1.

Пример

Где hasTokenCaseInsensitive выбросит ошибку для некорректного токена, hasTokenCaseInsensitiveOrNull вернет null для некорректного токена.

Запрос: