Функции для поиска в строках
Все функции в этом разделе по умолчанию ищут с учетом регистра. Поиск без учета регистра обычно обеспечивается отдельными вариантами функций.
Поиск без учета регистра следует правилам нижнего и верхнего регистра английского языка. Например, заглавная буква 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
для некорректного токена.
Запрос: