string-search-functions
description: 'Документация по Функциям для Поиска в Строках' sidebar_label: 'Поиск в Строках' sidebar_position: 160 slug: /sql-reference/functions/string-search-functions title: 'Функции для Поиска в Строках'
Функции для Поиска в Строках
Все функции в этом разделе ищут с учетом регистра по умолчанию. Поиск без учета регистра обычно предоставляется отдельными вариантами функций.
Поиск без учета регистра следует правилам преобразования строчных и заглавных букв английского языка. Например, заглавная буква 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
– Позиция (с 1) в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.
Синтаксис
Аргументы
Возвращаемое значение
- Массив начальных позиций в байтах, начиная с 1, если подстрока найдена.
- 0, если подстрока не найдена.
Пример
Запрос:
Результат:
multiSearchAllPositionsCaseInsensitive
Как multiSearchAllPositions, но игнорирует регистр.
Синтаксис
Аргументы
Возвращаемое значение
- Массив начальных позиций в байтах, начиная с 1 (если подстрока была найдена).
- 0, если подстрока не найдена.
Пример
Запрос:
Результат:
multiSearchAllPositionsUTF8
Как multiSearchAllPositions, но предполагает, что haystack
и подстроки needle
закодированы в UTF-8.
Синтаксис
Аргументы
haystack
— Строка, закодированная в UTF-8, в которой выполняется поиск. Строка.needle
— Подстроки, закодированные в UTF-8, для поиска. Массив.
Возвращаемое значение
- Массив начальных позиций в байтах, начиная с 1 (если подстрока была найдена).
- 0, если подстрока не найдена.
Пример
Дана строка ClickHouse
в кодировке UTF-8, найдите позиции C
(\x43
) и H
(\x48
).
Запрос:
Результат:
multiSearchAllPositionsCaseInsensitiveUTF8
Как multiSearchAllPositionsUTF8, но игнорирует регистр.
Синтаксис
Аргументы
haystack
— Строка в кодировке UTF-8, в которой выполняется поиск. Строка.needle
— Подстроки, закодированные в UTF-8, для поиска. Массив.
Возвращаемое значение
- Массив начальных позиций в байтах, начиная с 1 (если подстрока была найдена).
- 0, если подстрока не найдена.
Пример
Дана строка ClickHouse
в кодировке UTF-8, найдите позиции c
(\x63
) и h
(\x68
).
Запрос:
Результат:
multiSearchFirstPosition
Как position
, но возвращает левый смещенный индекс в строке haystack
, который совпадает с любым из нескольких needle
строк.
Функции multiSearchFirstPositionCaseInsensitive
, multiSearchFirstPositionUTF8
и multiSearchFirstPositionCaseInsensitiveUTF8
предоставляют версии этой функции без учета регистра и/или UTF-8.
Синтаксис
Аргументы
Возвращаемое значение
- Левое смещение в строке
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.
Синтаксис
Аргументы
Возвращаемое значение
- индекс (начиная с 1) первой найденной подстроки. В противном случае 0, если совпадений не было. UInt8.
Пример
Запрос:
Результат:
multiSearchFirstIndexCaseInsensitive
Возвращает индекс i
(начиная с 1) первой найденной подстроки needle<sub>i</sub>
в строке haystack
и 0 в противном случае. Игнорирует регистр.
Синтаксис
Аргументы
Возвращаемое значение
- индекс (начиная с 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.
Синтаксис
Аргументы
Возвращаемое значение
- 1, если было хотя бы одно совпадение.
- 0, если совпадений не было.
Пример
Запрос:
Результат:
multiSearchAnyCaseInsensitive
Как multiSearchAny, но игнорирует регистр.
Синтаксис
Аргументы
Возвращаемое значение
- 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 с использованием двух байтов. Регулярное выражение не должно содержать нулевых байтов. Если haystack
или pattern
не являются допустимыми строками 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, представляющее схожесть между двумя строками. Float32
Детали реализации
Эта функция выбросит исключение, если постоянные аргументы needle
или haystack
превышают 32 Кб по размеру. Если какие-либо непостоянные аргументы haystack
или needle
превышают 32 Кб по размеру, то расстояние всегда равно 1.
Примеры
Чем более схожи две строки между собой, тем ближе результат к 0 (идентично).
Запрос:
Результат:
Чем менее схожи две строки, тем больше результат.
Запрос:
Результат:
ngramDistanceCaseInsensitive
Предоставляет нечувствительный к регистру вариант ngramDistance.
Синтаксис
Параметры
haystack
: Первая сравниваемая строка. Строковый литералneedle
: Вторая сравниваемая строка. Строковый литерал
Возвращаемое значение
- Значение от 0 до 1, представляющее схожесть между двумя строками. Float32
Примеры
С функцией ngramDistance различия в регистре повлияют на значение схожести:
Запрос:
Результат:
С функцией ngramDistanceCaseInsensitive регистр игнорируется, поэтому две идентичные строки, различающиеся только регистром, теперь будут возвращать низкое значение схожести:
Запрос:
Результат:
ngramDistanceUTF8
Предоставляет UTF-8 вариант ngramDistance. Предполагается, что строки needle
и haystack
закодированы в UTF-8.
Синтаксис
Параметры
haystack
: Первая строка сравнения, закодированная в UTF-8. Строковый литералneedle
: Вторая строка сравнения, закодированная в UTF-8. Строковый литерал
Возвращаемое значение
- Значение от 0 до 1, представляющее схожесть между двумя строками. Float32
Пример
Запрос:
Результат:
ngramDistanceCaseInsensitiveUTF8
Предоставляет нечувствительный к регистру вариант ngramDistanceUTF8.
Синтаксис
Параметры
haystack
: Первая строка сравнения, закодированная в UTF-8. Строковый литералneedle
: Вторая строка сравнения, закодированная в UTF-8. Строковый литерал
Возвращаемое значение
- Значение от 0 до 1, представляющее схожесть между двумя строками. 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
Предоставляет UTF-8 вариант 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
Возвращает количество совпадений регулярного выражения для pattern
в haystack
, подобно countMatches
, но совпадения игнорируют регистр.
Синтаксис
Аргументы
haystack
— Строка для поиска. Строка.pattern
— Регулярное выражение с синтаксисом регулярного выражения re2. Строка.
Возвращаемое значение
- Количество совпадений. UInt64.
Примеры
Запрос:
Результат:
regexpExtract
Извлекает первую строку в haystack
, которая соответствует шаблону регулярного выражения и соответствует индексу группы регулярного выражения.
Синтаксис
Псевдоним: REGEXP_EXTRACT(haystack, pattern[, index])
.
Аргументы
haystack
— Строка, в которой будет соответствовать шаблон регулярного выражения. Строка.pattern
— Строка, регулярное выражение, должно быть постоянным. Строка.index
– Целое число, большее или равное 0, по умолчанию 1. Это указывает, какую группу регулярного выражения извлечь. UInt или Int. Необязательный.
Возвращаемое значение
pattern
может содержать несколько групп регулярных выражений, index
указывает, какую группу регулярного выражения извлечь. Индекс 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
для токена с неправильной формой.
Запрос: