Функции для поиска в строках
Все функции в этом разделе по умолчанию ищут с учетом регистра. Поиск без учета регистра обычно обеспечивается отдельными вариантами функций.
Поиск без учета регистра следует правилам нижнего и верхнего регистра английского языка. Например, заглавная буква 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— Входная строка. Строка.pattern— Регулярное выражение с синтаксисом регулярных выражений re2.
Возвращаемое значение
- Первое совпадение регулярного выражения в строке
haystack. Строка.
Пример
Запрос:
Результат:
extractAll
Возвращает массив всех совпадений регулярного выражения в строке. Если haystack не совпадает с регулярным выражением pattern, возвращается пустая строка.
Поведение по отношению к подшаблонам такое же, как в функции extract.
Синтаксис
Аргументы
haystack— Входная строка. Строка.pattern— Регулярное выражение с синтаксисом регулярных выражений re2.
Возвращаемое значение
Пример
Запрос:
Результат:
extractAllGroupsHorizontal
Соответствует всем группам строки haystack, используя регулярное выражение pattern. Возвращает массив массивов, где первый массив включает все фрагменты, соответствующие первой группе, второй массив - соответствующие второй группе и т.д.
Эта функция медленнее, чем extractAllGroupsVertical.
Синтаксис
Аргументы
haystack— Входная строка. Строка.pattern— Регулярное выражение с синтаксисом регулярных выражений re2. Должно содержать группы, каждая группа заключена в скобки. Еслиpatternне содержит групп, выбрасывается исключение. Строка.
Возвращаемое значение
- Массив массивов совпадений. Массив.
Если haystack не соответствует регулярному выражению pattern, возвращается массив пустых массивов.
Пример
Результат:
extractGroups
Сопоставляет все группы заданной входной строки с данным регулярным выражением и возвращает массив массивов совпадений.
Синтаксис
Аргументы
haystack— Входная строка. Строка.pattern— Регулярное выражение с синтаксисом регулярных выражений re2. Должно содержать группы, каждая группа заключена в скобки. Еслиpatternне содержит групп, выбрасывается исключение. Строка.
Возвращаемое значение
- Массив массивов совпадений. Массив.
Пример
Результат:
extractAllGroupsVertical
Соответствует всем группам строки haystack, используя регулярное выражение pattern. Возвращает массив массивов, где каждый массив включает совпадающие фрагменты из каждой группы. Фрагменты сгруппированы в порядке их появления в haystack.
Синтаксис
Аргументы
haystack— Входная строка. Строка.pattern— Регулярное выражение с синтаксисом регулярных выражений re2. Должно содержать группы, каждая группа заключена в скобки. Еслиpatternне содержит групп, выбрасывается исключение. Строка.
Возвращаемое значение
- Массив массивов совпадений. Массив.
Если 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.
Синтаксис
Параметры
haystack: Первая сравниваемая строка. Строковый литералneedle: Вторая сравниваемая строка. Строковый литерал
Возвращаемое значение
- Значение от 0 до 1, представляющееSimilarity между двумя строками. Float32
Детали реализации
Эта функция выбросит исключение, если постоянные аргументы needle или haystack превышают 32 Кб в размере. Если любые непостоянные аргументы haystack или needle превышают 32 Кб в размере, то расстояние всегда будет равно 1.
Примеры
Чем более похожи две строки друг на друга, тем ближе результат будет к 0 (идентично).
Запрос:
Результат:
Чем менее похожи две строки, тем больше будет результат.
Запрос:
Результат:
ngramDistanceCaseInsensitive
Предоставляет вариант ngramDistance без учета регистра.
Синтаксис
Параметры
haystack: Первая сравниваемая строка. Строковый литералneedle: Вторая сравниваемая строка. Строковый литерал
Возвращаемое значение
- Значение от 0 до 1, представляющееSimilarity между двумя строками. Float32
Примеры
С ngramDistance различия в регистре влияют на значение схожести:
Запрос:
Результат:
С ngramDistanceCaseInsensitive регистр игнорируется, так что две идентичные строки, отличающиеся только регистром, теперь вернут низкое значение схожести:
Запрос:
Результат:
ngramDistanceUTF8
Предоставляет вариант ngramDistance для строк, закодированных в UTF-8.
Синтаксис
Параметры
haystack: Первая строка, закодированная в UTF-8. Строковый литералneedle: Вторая строка, закодированная в UTF-8. Строковый литерал
Возвращаемое значение
- Значение от 0 до 1, представляющееSimilarity между двумя строками. Float32
Пример
Запрос:
Результат:
ngramDistanceCaseInsensitiveUTF8
Предоставляет вариант без учета регистра для ngramDistanceUTF8.
Синтаксис
Параметры
haystack: Первая строка, закодированная в UTF-8. Строковый литералneedle: Вторая строка, закодированная в UTF-8. Строковый литерал
Возвращаемое значение
- Значение от 0 до 1, представляющееSimilarity между двумя строками. Float32
Пример
Запрос:
Результат:
ngramSearch
Как ngramDistance, но вычисляет несимметричную разность между строкой needle и строкой haystack, т. е. количество n-граммов из needle минус общее количество n-граммов, нормализованное по количеству n-граммов needle. Возвращает Float32 в диапазоне от 0 до 1. Чем больше результат, тем более вероятно, что needle находится в haystack. Эта функция полезна для нечеткого поиска строк. Также смотрите функцию soundex.
Функции ngramSearchCaseInsensitive, ngramSearchUTF8, ngramSearchCaseInsensitiveUTF8 предоставляют варианты этой функции без учета регистра и/или для UTF-8.
Синтаксис
Параметры
haystack: Первая строка для сравнения. Строковый литералneedle: Вторая строка для сравнения. Строковый литерал
Возвращаемое значение
- Значение от 0 до 1, представляющее вероятность того, что
needleнаходится вhaystack. Float32
Детали реализации
Варианты UTF-8 используют расстояние 3-граммы. Эти расстояния не являются абсолютно справедливыми n-граммами. Мы используем 2-байтовые хеши для хеширования n-грамм, а затем рассчитываем (не-)симметричную разность между этими таблицами хешей - коллизии могут происходить. В формате UTF-8 без учета регистра мы не используем честную функцию tolower - мы обнуляем 5-й бит (начиная с нуля) каждого байта кодовой точки и первый бит нулевого байта, если байтов больше одного - это работает для латиницы и в основном для всех кириллических букв.
Пример
Запрос:
Результат:
ngramSearchCaseInsensitive
Предоставляет вариант без учета регистра для ngramSearch.
Синтаксис
Параметры
haystack: Первая строка для сравнения. Строковый литералneedle: Вторая строка для сравнения. Строковый литерал
Возвращаемое значение
- Значение от 0 до 1, представляющее вероятность того, что
needleнаходится вhaystack. Float32
Чем больше результат, тем более вероятно, что needle находится в haystack.
Пример
Запрос:
Результат:
ngramSearchUTF8
Предоставляет вариант ngramSearch, где needle и haystack предполагается закодированными в UTF-8.
Синтаксис
Параметры
haystack: Первая строка, закодированная в UTF-8. Строковый литералneedle: Вторая строка, закодированная в UTF-8. Строковый литерал
Возвращаемое значение
- Значение от 0 до 1, представляющее вероятность того, что
needleнаходится вhaystack. Float32
Чем больше результат, тем более вероятно, что needle находится в haystack.
Пример
Запрос:
Результат:
ngramSearchCaseInsensitiveUTF8
Предоставляет вариант без учета регистра для ngramSearchUTF8, в котором предполагается, что needle и haystack.
Синтаксис
Параметры
haystack: Первая строка, закодированная в UTF-8. Строковый литералneedle: Вторая строка, закодированная в UTF-8. Строковый литерал
Возвращаемое значение
- Значение от 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.
Синтаксис
Аргументы
haystack— Строка, в которой выполняется поиск. Строка.pattern— Регулярное выражение с синтаксисом регулярных выражений re2. Строка.
Возвращаемое значение
- Количество совпадений. UInt64.
Примеры
Результат:
Результат:
countMatchesCaseInsensitive
Возвращает количество совпадений регулярного выражения для шаблона в строке haystack, как и countMatches, но сопоставление игнорирует регистр.
Синтаксис
Аргументы
haystack— Строка, в которой выполняется поиск. Строка.pattern— Регулярное выражение с синтаксисом регулярных выражений re2. Строка.
Возвращаемое значение
- Количество совпадений. 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 для некорректного токена.
Запрос: