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

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

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

Примечание

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

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

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

Примечание

Документация ниже сгенерирована из системной таблицы system.functions.

countMatches

Введена в версии v21.1.

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

Version dependent behavior

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

  • в версиях < v25.6 функция прекращает счёт при первом пустом совпадении, даже если шаблон допускает дальнейшие совпадения;
  • в версиях >= 25.6 функция продолжает выполнение при возникновении пустого совпадения. Устаревшее поведение можно восстановить с помощью настройки count_matches_stop_at_empty_match = true;

Синтаксис

countMatches(haystack, pattern)

Аргументы

  • haystack — строка, в которой выполняется поиск. String
  • pattern — шаблон регулярного выражения. String

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

Возвращает количество найденных совпадений. UInt64

Примеры

Подсчёт последовательностей цифр

SELECT countMatches('hello 123 world 456 test', '[0-9]+')
┌─countMatches('hello 123 world 456 test', '[0-9]+')─┐
│                                                   2 │
└─────────────────────────────────────────────────────┘

countMatchesCaseInsensitive

Введена в версии v21.1

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

Синтаксис

countMatchesCaseInsensitive(haystack, pattern)

Аргументы

  • haystack — строка, в которой выполняется поиск. String
  • pattern — шаблон регулярного выражения. const String

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

Возвращает количество найденных совпадений. UInt64

Примеры

Подсчёт без учёта регистра

SELECT countMatchesCaseInsensitive('Hello HELLO world', 'hello')
┌─countMatchesCaseInsensitive('Hello HELLO world', 'hello')─┐
│                                                         2 │
└───────────────────────────────────────────────────────────┘

countSubstrings

Добавлена в версии: v21.1

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

Синтаксис

countSubstrings(haystack, needle[, start_pos])

Аргументы

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

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

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

Примеры

Пример использования

SELECT countSubstrings('aaaa', 'aa');
┌─countSubstrings('aaaa', 'aa')─┐
│                             2 │
└───────────────────────────────┘

С использованием аргумента start_pos

SELECT countSubstrings('abc___abc', 'abc', 4);
┌─countSubstrings('abc___abc', 'abc', 4)─┐
│                                      1 │
└────────────────────────────────────────┘

countSubstringsCaseInsensitive

Впервые появилась в версии: v21.1

Аналог countSubstrings, но выполняет подсчёт без учёта регистра.

Синтаксис

countSubstringsCaseInsensitive(haystack, needle[, start_pos])

Аргументы

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

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

Возвращает количество вхождений needle в haystack. UInt64

Примеры

Пример использования

SELECT countSubstringsCaseInsensitive('AAAA', 'aa');
┌─countSubstri⋯AAA', 'aa')─┐
│                        2 │
└──────────────────────────┘

С аргументом start_pos

SELECT countSubstringsCaseInsensitive('abc___ABC___abc', 'abc', 4);
┌─countSubstri⋯, 'abc', 4)─┐
│                        2 │
└──────────────────────────┘

countSubstringsCaseInsensitiveUTF8

Введена в версии v21.1

Аналог countSubstrings, но выполняет поиск без учета регистра и предполагает, что haystack — это строка в кодировке UTF-8.

Синтаксис

countSubstringsCaseInsensitiveUTF8(haystack, needle[, start_pos])

Аргументы

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

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

Возвращает количество вхождений needle в haystack. UInt64

Примеры

Пример использования

SELECT countSubstringsCaseInsensitiveUTF8('ложка, кошка, картошка', 'КА');
┌─countSubstri⋯шка', 'КА')─┐
│                        4 │
└──────────────────────────┘

С аргументом start_pos

SELECT countSubstringsCaseInsensitiveUTF8('ложка, кошка, картошка', 'КА', 13);
┌─countSubstri⋯, 'КА', 13)─┐
│                        2 │
└──────────────────────────┘

extract

Введена в: v1.1

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

Эта функция использует библиотеку регулярных выражений RE2. См. поддерживаемый синтаксис в документации re2.

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

Синтаксис

extract(haystack, pattern)

Аргументы

  • haystack — Строка, из которой выполняется извлечение. String
  • pattern — Регулярное выражение, как правило содержащее захватывающую группу. const String

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

Возвращает извлечённый фрагмент в виде строки. String

Примеры

Извлечение домена из email-адреса

SELECT extract('[email protected]', '.*@(.*)$')
┌─extract('[email protected]', '.*@(.*)$')─┐
│ clickhouse.com                            │
└───────────────────────────────────────────┘

Если совпадений нет, возвращает пустую строку

SELECT extract('[email protected]', 'no_match')
┌─extract('[email protected]', 'no_match')─┐
│                                            │
└────────────────────────────────────────────┘

extractAll

Добавлено в версии: v1.1

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

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

Синтаксис

extractAll(haystack, pattern)

Аргументы

  • haystack — Строка, из которой нужно извлечь фрагменты. String
  • pattern — Регулярное выражение, при необходимости содержащее группы захвата. const String

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

Возвращает массив извлечённых фрагментов. Array(String)

Примеры

Извлечение всех чисел

SELECT extractAll('hello 123 world 456', '[0-9]+')
┌─extractAll('hello 123 world 456', '[0-9]+')─┐
│ ['123','456']                               │
└─────────────────────────────────────────────┘

Извлечение с использованием захватывающей группы

SELECT extractAll('[email protected], [email protected]', '([a-zA-Z0-9]+)@')
┌─extractAll('[email protected], [email protected]', '([a-zA-Z0-9]+)@')─┐
│ ['test','user']                                                    │
└────────────────────────────────────────────────────────────────────┘

extractAllGroupsHorizontal

Добавлено в: v20.5

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

Синтаксис

extractAllGroupsHorizontal(s, regexp)

Аргументы

  • s — входная строка, из которой выполняется извлечение. String или FixedString
  • regexp — регулярное выражение для поиска совпадений. const String или const FixedString

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

Возвращает массив массивов, где каждый внутренний массив содержит все захваченные подстроки из одной группы захвата по всем найденным совпадениям. Первый внутренний массив содержит все захваты из группы 1, второй — из группы 2 и т.д. Если совпадения не найдены, возвращается пустой массив. Array(Array(String))

Примеры

Пример использования

WITH '< Server: nginx
< Date: Tue, 22 Jan 2019 00:26:14 GMT
< Content-Type: text/html; charset=UTF-8
< Connection: keep-alive
' AS s
SELECT extractAllGroupsHorizontal(s, '< ([\\w\\-]+): ([^\\r\\n]+)');
[['Server','Date','Content-Type','Connection'],['nginx','Tue, 22 Jan 2019 00:26:14 GMT','text/html; charset=UTF-8','keep-alive']]

extractGroups

Добавлено в: v20.5

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

Синтаксис

extractAllGroups(s, regexp)

Аргументы

  • s — входная строка, из которой выполняется извлечение. String или FixedString
  • regexp — регулярное выражение. Константа. const String или const FixedString

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

Если функция находит хотя бы одну подходящую группу, она возвращает столбец типа Array(Array(String)), разбитый по group_id (1 до N, где N — количество групп захвата в regexp). Если подходящих групп нет, возвращается пустой массив. Array(Array(String))

Примеры

Пример использования

WITH '< Server: nginx
< Date: Tue, 22 Jan 2019 00:26:14 GMT
< Content-Type: text/html; charset=UTF-8
< Connection: keep-alive
' AS s
SELECT extractAllGroups(s, '< ([\\w\\-]+): ([^\\r\\n]+)');
[['Server','nginx'],['Date','Tue, 22 Jan 2019 00:26:14 GMT'],['Content-Type','text/html; charset=UTF-8'],['Connection','keep-alive']]

hasAllTokens

Введено в: v25.10

Аналогично hasAnyTokens, но возвращает 1, если все токены в строке или массиве needle совпадают со строкой input, и 0 в противном случае. Если input — это столбец, возвращает все строки, которые удовлетворяют этому условию.

Примечание

Для оптимальной производительности в столбце input должен быть определён текстовый индекс. Если текстовый индекс не определён, функция выполняет полное сканирование столбца методом перебора, что на порядки медленнее поиска по индексу.

Перед поиском функция токенизирует

  • аргумент input (обязательный) и
  • аргумент needle (если он передан как значение типа String) обрабатывается с использованием токенизатора, указанного для текстового индекса. Если для столбца не определён текстовый индекс, вместо этого используется токенизатор splitByNonAlpha. Если аргумент needle имеет тип Array(String), каждый элемент массива рассматривается как отдельный токен — дополнительная токенизация не выполняется.

Дублирующиеся токены игнорируются. Например, needles = ['ClickHouse', 'ClickHouse'] обрабатывается так же, как и ['ClickHouse'].

Синтаксис

hasAllTokens(input, needles)

Синонимы: hasAllToken

Аргументы

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

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

Примеры

Пример использования для столбца типа String

CREATE TABLE table (
    id UInt32,
    msg String,
    INDEX idx(msg) TYPE text(tokenizer = splitByString(['()', '\\']))
)
ENGINE = MergeTree
ORDER BY id;

INSERT INTO table VALUES (1, '()a,\\bc()d'), (2, '()\\a()bc\\d'), (3, ',()a\\,bc,(),d,');

SELECT count() FROM table WHERE hasAllTokens(msg, 'a\\d()');
┌─count()─┐
│       1 │
└─────────┘

Укажите искомые подстроки в массиве КАК ЕСТЬ (без токенизации)

SELECT count() FROM table WHERE hasAllTokens(msg, ['a', 'd']);
┌─count()─┐
│       1 │
└─────────┘

Генерация искомых значений с помощью функции tokens

SELECT count() FROM table WHERE hasAllTokens(msg, tokens('a()d', 'splitByString', ['()', '\\']));
┌─count()─┐
│       1 │
└─────────┘

Примеры использования для столбцов array и map

CREATE TABLE log (
    id UInt32,
    tags Array(String),
    attributes Map(String, String),
    INDEX idx_tags (tags) TYPE text(tokenizer = splitByNonAlpha),
    INDEX idx_attributes_keys mapKeys(attributes) TYPE text(tokenizer = array),
    INDEX idx_attributes_vals mapValues(attributes) TYPE text(tokenizer = array)
)
ENGINE = MergeTree
ORDER BY id;

INSERT INTO log VALUES
    (1, ['clickhouse', 'clickhouse cloud'], {'address': '192.0.0.1', 'log_level': 'INFO'}),
    (2, ['chdb'], {'embedded': 'true', 'log_level': 'DEBUG'});

Пример со столбцом-массивом

SELECT count() FROM log WHERE hasAllTokens(tags, 'clickhouse');
┌─count()─┐
│       1 │
└─────────┘

Пример с mapKeys

SELECT count() FROM log WHERE hasAllTokens(mapKeys(attributes), ['address', 'log_level']);
┌─count()─┐
│       1 │
└─────────┘

Пример с mapValues

SELECT count() FROM log WHERE hasAllTokens(mapValues(attributes), ['192.0.0.1', 'DEBUG']);
┌─count()─┐
│       0 │
└─────────┘

hasAnyTokens

Добавлена в версии: v25.10

Возвращает 1, если хотя бы один токен в строке или массиве needle совпадает со строкой input, и 0 в противном случае. Если input — это столбец, возвращает все строки, которые удовлетворяют этому условию.

Примечание

Для столбца input должен быть определён текстовый индекс для оптимальной производительности. Если текстовый индекс не определён, функция выполняет полное сканирование столбца, что на порядки медленнее, чем поиск по индексу.

Перед поиском функция токенизирует

  • аргумент input (всегда) и
  • аргумент needle (если он передан как String), используя токенизатор, указанный для текстового индекса. Если у столбца не определён текстовый индекс, вместо этого используется токенизатор splitByNonAlpha. Если аргумент needle имеет тип Array(String), каждый элемент массива рассматривается как отдельный токен — дополнительная токенизация не выполняется.

Дубликаты токенов игнорируются. Например, ['ClickHouse', 'ClickHouse'] обрабатывается так же, как ['ClickHouse'].

Синтаксис

hasAnyTokens(input, needles)

Псевдонимы: hasAnyToken

Аргументы

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

Возвращает 1, если было найдено хотя бы одно совпадение, иначе 0. UInt8

Примеры

Пример использования для строкового столбца

CREATE TABLE table (
    id UInt32,
    msg String,
    INDEX idx(msg) TYPE text(tokenizer = splitByString(['()', '\\']))
)
ENGINE = MergeTree
ORDER BY id;

INSERT INTO table VALUES (1, '()a,\\bc()d'), (2, '()\\a()bc\\d'), (3, ',()a\\,bc,(),d,');

SELECT count() FROM table WHERE hasAnyTokens(msg, 'a\\d()');
┌─count()─┐
│       3 │
└─────────┘

Укажите значения для поиска КАК ЕСТЬ (без разбиения на токены) в массиве

SELECT count() FROM table WHERE hasAnyTokens(msg, ['a', 'd']);
┌─count()─┐
│       3 │
└─────────┘

Сгенерируйте подстроки (needles) с помощью функции tokens

SELECT count() FROM table WHERE hasAnyTokens(msg, tokens('a()d', 'splitByString', ['()', '\\']));
┌─count()─┐
│       3 │
└─────────┘

Примеры использования столбцов Array и Map

CREATE TABLE log (
    id UInt32,
    tags Array(String),
    attributes Map(String, String),
    INDEX idx_tags (tags) TYPE text(tokenizer = splitByNonAlpha),
    INDEX idx_attributes_keys mapKeys(attributes) TYPE text(tokenizer = array),
    INDEX idx_attributes_vals mapValues(attributes) TYPE text(tokenizer = array)
)
ENGINE = MergeTree
ORDER BY id;

INSERT INTO log VALUES
    (1, ['clickhouse', 'clickhouse cloud'], {'address': '192.0.0.1', 'log_level': 'INFO'}),
    (2, ['chdb'], {'embedded': 'true', 'log_level': 'DEBUG'});

Пример со столбцом типа массив

SELECT count() FROM log WHERE hasAnyTokens(tags, 'clickhouse');
┌─count()─┐
│       1 │
└─────────┘

Пример с mapKeys

SELECT count() FROM log WHERE hasAnyTokens(mapKeys(attributes), ['address', 'log_level']);
┌─count()─┐
│       2 │
└─────────┘

Пример использования mapValues

SELECT count() FROM log WHERE hasAnyTokens(mapValues(attributes), ['192.0.0.1', 'DEBUG']);
┌─count()─┐
│       2 │
└─────────┘

hasSubsequence

Введена в версии: v23.7

Проверяет, является ли needle подпоследовательностью haystack. Подпоследовательность строки — это последовательность, которую можно получить из другой строки, удалив некоторые (или ни одного) символы, не изменяя порядок оставшихся символов.

Синтаксис

hasSubsequence(haystack, needle)

Аргументы

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

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

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

Примеры

Базовая проверка подпоследовательности

SELECT hasSubsequence('Hello World', 'HlWrd')
┌─hasSubsequence('Hello World', 'HlWrd')─┐
│                                      1 │
└────────────────────────────────────────┘

Подпоследовательность не найдена

SELECT hasSubsequence('Hello World', 'xyz')
┌─hasSubsequence('Hello World', 'xyz')─┐
│                                    0 │
└──────────────────────────────────────┘

hasSubsequenceCaseInsensitive

Добавлена в версии: v23.7

Аналог функции hasSubsequence, но выполняет поиск без учета регистра.

Синтаксис

hasSubsequenceCaseInsensitive(haystack, needle)

Аргументы

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

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

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

Примеры

Пример использования

SELECT hasSubsequenceCaseInsensitive('garbage', 'ARG');
┌─hasSubsequenceCaseInsensitive('garbage', 'ARG')─┐
│                                               1 │
└─────────────────────────────────────────────────┘

hasSubsequenceCaseInsensitiveUTF8

Появилась в версии v23.7

Аналог функции hasSubsequenceUTF8, но выполняет поиск без учета регистра.

Синтаксис

hasSubsequenceCaseInsensitiveUTF8(haystack, needle)

Аргументы

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

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

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

Примеры

Пример использования

SELECT hasSubsequenceCaseInsensitiveUTF8('ClickHouse - столбцовая система управления базами данных', 'СИСТЕМА');
┌─hasSubsequen⋯ 'СИСТЕМА')─┐
│                        1 │
└──────────────────────────┘

hasSubsequenceUTF8

Введена в версии v23.7

Аналог hasSubsequence, но предполагает, что haystack и needle — строки в кодировке UTF-8.

Синтаксис

hasSubsequenceUTF8(haystack, needle)

Аргументы

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

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

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

Примеры

Пример использования

SELECT hasSubsequenceUTF8('картошка', 'кошка');
┌─hasSubsequen⋯', 'кошка')─┐
│                        1 │
└──────────────────────────┘

Неподходящая подпоследовательность

SELECT hasSubsequenceUTF8('картошка', 'апельсин');
┌─hasSubsequen⋯'апельсин')─┐
│                        0 │
└──────────────────────────┘

hasToken

Добавлена в: v20.1

Проверяет, присутствует ли заданный токен в строке.

Токен определяется как максимально длинная подпоследовательность подряд идущих символов [0-9A-Za-z_], то есть цифр, ASCII‑букв и символа подчёркивания.

Синтаксис

hasToken(haystack, token)

Аргументы

  • haystack — Строка, в которой выполняется поиск. String
  • token — Токен, который нужно найти. const String

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

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

Примеры

Поиск токена

SELECT hasToken('clickhouse test', 'test')
┌─hasToken('clickhouse test', 'test')─┐
│                                   1 │
└─────────────────────────────────────┘

hasTokenCaseInsensitive

Добавлена в версии: v

Выполняет поиск needle в haystack без учета регистра с использованием индекса tokenbf_v1.

Синтаксис

Аргументы

  • Нет.

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

Примеры

hasTokenCaseInsensitiveOrNull

Введена в: v

Выполняет поиск needle в haystack без учета регистра с использованием индекса tokenbf_v1. Возвращает null, если needle некорректно сформирован.

Синтаксис

Аргументы

  • Нет.

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

Примеры

hasTokenOrNull

Добавлено в: v20.1

Аналог hasToken, но возвращает null, если токен некорректно сформирован.

Синтаксис

hasTokenOrNull(haystack, token)

Аргументы

  • haystack — Строка, в которой выполняется поиск. Должна быть константой. String
  • token — Токен для поиска. const String

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

Возвращает 1, если токен найден, 0 — в противном случае, NULL, если токен имеет некорректный формат. Nullable(UInt8)

Примеры

Пример использования

SELECT hasTokenOrNull('apple banana cherry', 'ban ana');
┌─hasTokenOrNu⋯ 'ban ana')─┐
│                     ᴺᵁᴸᴸ │
└──────────────────────────┘

ilike

Добавлено в: v20.6

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

Синтаксис

ilike(haystack, pattern)
-- haystack ILIKE pattern

Аргументы

  • haystack — строка, в которой выполняется поиск. String или FixedString
  • pattern — шаблон LIKE, с которым выполняется сопоставление. String

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

Возвращает 1, если строка соответствует шаблону LIKE (без учета регистра), иначе 0. UInt8

Примеры

Пример использования

SELECT ilike('ClickHouse', '%house%');
┌─ilike('ClickHouse', '%house%')─┐
│                              1 │
└────────────────────────────────┘

like

Появилась в версии v1.1

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

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

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

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

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

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

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

Примечание

ClickHouse требует, чтобы обратные слеши в строках также экранировались, поэтому фактически нужно писать \\%, \\_ и \\\\.

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

Синтаксис

like(haystack, pattern)
-- haystack LIKE pattern

Аргументы

  • haystack — строка, в которой выполняется поиск. String или FixedString
  • pattern — шаблон LIKE для сравнения со строкой. Может содержать % (соответствует любому количеству символов), _ (соответствует одному символу) и \ для экранирования. String

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

Возвращает 1, если строка соответствует шаблону LIKE, в противном случае — 0. UInt8

Примеры

Пример использования

SELECT like('ClickHouse', '%House');
┌─like('ClickHouse', '%House')─┐
│                            1 │
└──────────────────────────────┘

Односимвольный подстановочный символ

SELECT like('ClickHouse', 'Click_ouse');
┌─like('ClickH⋯lick_ouse')─┐
│                        1 │
└──────────────────────────┘

Несовпадающий шаблон

SELECT like('ClickHouse', '%SQL%');
┌─like('ClickHouse', '%SQL%')─┐
│                           0 │
└─────────────────────────────┘

locate

Введена в: v18.16

Аналог функции position, но с аргументами haystack и needle, расположенными в обратном порядке.

Поведение в разных версиях

Поведение этой функции зависит от версии 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.

Синтаксис

locate(needle, haystack[, start_pos])

Аргументы

  • needle — подстрока для поиска. String
  • haystack — строка, в которой выполняется поиск. String или Enum
  • start_pos — необязательный параметр. Позиция (счёт с 1) в haystack, с которой начинается поиск. UInt

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

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

Примеры

Базовое использование

SELECT locate('ca', 'abcabc')
┌─locate('ca', 'abcabc')─┐
│                      3 │
└────────────────────────┘

match

Введена в версии v1.1

Проверяет, соответствует ли указанная строка заданному шаблону регулярного выражения.

Эта функция использует библиотеку регулярных выражений RE2. Поддерживаемый синтаксис смотрите в документации re2.

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

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

Шаблон автоматически считается ограниченным с обеих сторон (как если бы он начинался с ^ и заканчивался $).

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

Альтернативный синтаксис оператора: haystack REGEXP pattern.

Синтаксис

match(haystack, pattern)

Псевдонимы: REGEXP_MATCHES

Аргументы

  • haystack — Строка, в которой выполняется поиск по шаблону. String
  • pattern — Шаблон регулярного выражения. const String

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

Возвращает 1, если строка соответствует шаблону, и 0 в противном случае. UInt8

Примеры

Простое сопоставление с шаблоном

SELECT match('Hello World', 'Hello.*')
┌─match('Hello World', 'Hello.*')─┐
│                               1 │
└─────────────────────────────────┘

Нет совпадения с шаблоном

SELECT match('Hello World', 'goodbye.*')
┌─match('Hello World', 'goodbye.*')─┐
│                                 0 │
└───────────────────────────────────┘

multiFuzzyMatchAllIndices

Добавлено в версии: v20.1

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

Синтаксис

multiFuzzyMatchAllIndices(haystack, distance, [pattern1, pattern2, ..., patternN])

Аргументы

  • haystack — строка, в которой выполняется поиск. String
  • distance — максимальное допустимое расстояние редактирования для нечеткого поиска. UInt8
  • pattern — массив шаблонов для сопоставления. Array(String)

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

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

Примеры

Пример использования

SELECT multiFuzzyMatchAllIndices('ClickHouse', 2, ['ClickHouse', 'ClckHouse', 'ClickHose', 'House']);
┌─multiFuzzyMa⋯, 'House'])─┐
│ [3,1,4,2]                │
└──────────────────────────┘

multiFuzzyMatchAny

Добавлено в: v20.1

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

Примечание

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

Синтаксис

multiFuzzyMatchAny(haystack, distance, [pattern1, pattern2, ..., patternN])

Аргументы

  • haystack — строка, в которой выполняется поиск. String
  • distance — максимальное расстояние редактирования для нечеткого сопоставления. UInt8
  • pattern — необязательный параметр. Массив шаблонов для сопоставления. Array(String)

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

Возвращает 1, если хотя бы один шаблон соответствует haystack в пределах заданного расстояния редактирования, иначе 0. UInt8

Примеры

Пример использования

SELECT multiFuzzyMatchAny('ClickHouse', 2, ['ClickHouse', 'ClckHouse', 'ClickHose']);
┌─multiFuzzyMa⋯lickHose'])─┐
│                        1 │
└──────────────────────────┘

multiFuzzyMatchAnyIndex

Представлена в: v20.1

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

Синтаксис

multiFuzzyMatchAnyIndex(haystack, distance, [pattern1, pattern2, ..., patternn])

Аргументы

  • haystack — Строка, в которой выполняется поиск. String
  • distance — Максимальное редакционное расстояние для нечеткого поиска. UInt8
  • pattern — Массив шаблонов для сопоставления. Array(String)

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

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

Примеры

Пример использования

SELECT multiFuzzyMatchAnyIndex('ClickHouse', 2, ['ClckHouse', 'ClickHose', 'ClickHouse']);
┌─multiFuzzyMa⋯ickHouse'])─┐
│                        2 │
└──────────────────────────┘

multiMatchAllIndices

Добавлена в версии v20.1

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

Синтаксис

multiMatchAllIndices(haystack, [pattern1, pattern2, ..., patternn])

Аргументы

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

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

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

Примеры

Пример использования

SELECT multiMatchAllIndices('ClickHouse', ['[0-9]', 'House', 'Click', 'ouse']);
┌─multiMatchAl⋯', 'ouse'])─┐
│ [3, 2, 4]                │
└──────────────────────────┘

multiMatchAny

Добавлена в: v20.1

Проверяет, соответствует ли хотя бы один из нескольких шаблонов регулярных выражений исходной строке.

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

Синтаксис

multiMatchAny(haystack, pattern1[, pattern2, ...])

Аргументы

  • haystack — Строка, в которой выполняется поиск шаблонов. String
  • pattern1[, pattern2, ...] — Массив из одного или нескольких шаблонов регулярных выражений. Array(String)

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

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

Примеры

Сопоставление с несколькими шаблонами

SELECT multiMatchAny('Hello World', ['Hello.*', 'foo.*'])
┌─multiMatchAny('Hello World', ['Hello.*', 'foo.*'])─┐
│                                                  1 │
└────────────────────────────────────────────────────┘

Ни один шаблон не совпал

SELECT multiMatchAny('Hello World', ['goodbye.*', 'foo.*'])
┌─multiMatchAny('Hello World', ['goodbye.*', 'foo.*'])─┐
│                                                    0 │
└──────────────────────────────────────────────────────┘

multiMatchAnyIndex

Впервые появилась в: v20.1

Аналог multiMatchAny, но возвращает любой индекс совпадения в строке, по которой выполняется поиск.

Синтаксис

multiMatchAnyIndex(haystack, [pattern1, pattern2, ..., patternn])

Аргументы

  • haystack — строка, в которой выполняется поиск. String
  • pattern — регулярные выражения для поиска совпадений. Array(String)

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

Возвращает индекс (начиная с 1) первого шаблона, для которого найдено совпадение, или 0, если совпадений нет. UInt64

Примеры

Пример использования

SELECT multiMatchAnyIndex('ClickHouse', ['[0-9]', 'House', 'Click']);
┌─multiMatchAn⋯, 'Click'])─┐
│                        3 │
└──────────────────────────┘

multiSearchAllPositions

Добавлена в версии v20.1

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

Все функции multiSearch*() поддерживают не более 2^8 подстрок needle.

Синтаксис

multiSearchAllPositions(haystack, needle1[, needle2, ...])

Аргументы

  • haystack — Строка, в которой выполняется поиск. String
  • needle1[, needle2, ...] — Массив из одной или нескольких подстрок для поиска. Array(String)

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

Возвращает массив начальных позиций в байтах (отсчёт с 1), если подстрока была найдена, и 0, если подстрока не найдена. Array(UInt64)

Примеры

Поиск по нескольким подстрокам

SELECT multiSearchAllPositions('Hello, World!', ['hello', '!', 'world'])
┌─multiSearchAllPositions('Hello, World!', ['hello', '!', 'world'])─┐
│ [0,13,0]                                                          │
└───────────────────────────────────────────────────────────────────┘

multiSearchAllPositionsCaseInsensitive

Добавлена в версии: v20.1

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

Синтаксис

multiSearchAllPositionsCaseInsensitive(haystack, needle1[, needle2, ...])

Аргументы

  • haystack — Строка, в которой выполняется поиск. String
  • needle1[, needle2, ...] — Массив из одной или нескольких подстрок для поиска. Array(String)

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

Возвращает массив начальных позиций в байтах, считая от 1 (если подстрока найдена), или 0, если подстрока не найдена. Array(UInt64)

Примеры

Множественный поиск без учета регистра

SELECT multiSearchAllPositionsCaseInsensitive('ClickHouse',['c','h'])
┌─multiSearchA⋯['c', 'h'])─┐
│ [1,6]                    │
└──────────────────────────┘

multiSearchAllPositionsCaseInsensitiveUTF8

Впервые появилась в версии v20.1

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

Синтаксис

multiSearchAllPositionsCaseInsensitiveUTF8(haystack, [needle1, needle2, ..., needleN])

Аргументы

  • haystack — строка в кодировке UTF-8, в которой выполняется поиск. String
  • needle — подстроки в кодировке UTF-8, которые необходимо найти. Array(String)

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

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

Примеры

Регистронезависимый поиск в UTF-8

SELECT multiSearchAllPositionsCaseInsensitiveUTF8('Здравствуй, мир!', ['здравствуй', 'МИР']);
┌─multiSearchA⋯й', 'МИР'])─┐
│ [1, 13]                  │
└──────────────────────────┘

multiSearchAllPositionsUTF8

Добавлена в: v20.1

Аналог multiSearchAllPositions, но предполагает, что haystack и подстроки needle — это строки в кодировке UTF-8.

Синтаксис

multiSearchAllPositionsUTF8(haystack, needle1[, needle2, ...])

Аргументы

  • haystack — строка в кодировке UTF-8, в которой выполняется поиск. String
  • needle1[, needle2, ...] — массив подстрок в кодировке UTF-8, которые нужно найти. Array(String)

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

Возвращает массив начальных позиций подстрок в байтах (отсчёт с 1, если подстрока найдена) или 0, если подстрока не найдена. Array

Примеры

Поиск нескольких подстрок в UTF-8

SELECT multiSearchAllPositionsUTF8('ClickHouse',['C','H'])
┌─multiSearchAllPositionsUTF8('ClickHouse', ['C', 'H'])─┐
│ [1,6]                                                 │
└───────────────────────────────────────────────────────┘

multiSearchAny

Впервые представлена в: v20.1

Проверяет, совпадает ли хотя бы одна из нескольких строк-шаблонов с исходной строкой.

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

Синтаксис

multiSearchAny(haystack, needle1[, needle2, ...])

Аргументы

  • haystack — строка, в которой выполняется поиск. String
  • needle1[, needle2, ...] — массив подстрок для поиска. Array(String)

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

Возвращает 1, если найдено хотя бы одно совпадение, иначе 0, если не найдено ни одного совпадения. UInt8

Примеры

Поиск любого совпадения

SELECT multiSearchAny('ClickHouse',['C','H'])
┌─multiSearchAny('ClickHouse', ['C', 'H'])─┐
│                                        1 │
└──────────────────────────────────────────┘

multiSearchAnyCaseInsensitive

Впервые появилась в версии v20.1

Аналог функции multiSearchAny, но без учета регистра.

Синтаксис

multiSearchAnyCaseInsensitive(haystack, [needle1, needle2, ..., needleN])

Аргументы

  • haystack — строка, в которой выполняется поиск. String
  • needle — подстроки, которые необходимо найти. Array(String)

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

Возвращает 1, если найдено хотя бы одно совпадение без учета регистра, в противном случае — 0. UInt8

Примеры

Поиск без учета регистра

SELECT multiSearchAnyCaseInsensitive('ClickHouse',['c','h'])
┌─multiSearchAnyCaseInsensitive('ClickHouse', ['c', 'h'])─┐
│                                                       1 │
└─────────────────────────────────────────────────────────┘

multiSearchAnyCaseInsensitiveUTF8

Добавлена в: v20.1

Аналогична multiSearchAnyUTF8, но не учитывает регистр.

Синтаксис

multiSearchAnyCaseInsensitiveUTF8(haystack, [needle1, needle2, ..., needleN])

Аргументы

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

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

Возвращает 1, если найдено хотя бы одно совпадение без учета регистра, иначе — 0. UInt8

Примеры

Для строки UTF-8 'Здравствуйте' проверьте, содержится ли символ 'з' (в нижнем регистре)

SELECT multiSearchAnyCaseInsensitiveUTF8('Здравствуйте',['з'])
┌─multiSearchA⋯те', ['з'])─┐
│                        1 │
└──────────────────────────┘

multiSearchAnyUTF8

Добавлена в: v20.1

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

Синтаксис

multiSearchAnyUTF8(haystack, [needle1, needle2, ..., needleN])

Аргументы

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

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

Возвращает 1, если найдено хотя бы одно совпадение, иначе 0, если совпадений нет. UInt8

Примеры

Для строки в кодировке UTF-8 '你好,世界' ('Hello, world') проверьте, есть ли в строке символы 你 или 界

SELECT multiSearchAnyUTF8('你好,世界', ['你', '界'])
┌─multiSearchA⋯你', '界'])─┐
│                        1 │
└──────────────────────────┘

multiSearchFirstIndex

Впервые появилась в: v20.1

Выполняет поиск нескольких подстрок в исходной строке (с учётом регистра) и возвращает индекс (нумерация с 1) первой найденной подстроки.

Синтаксис

multiSearchFirstIndex(haystack, [needle1, needle2, ..., needleN])

Аргументы

  • haystack — Строка, в которой выполняется поиск. String
  • needles — Массив строк для поиска. Array(String)

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

Возвращает индекс, начинающийся с 1 (позицию в массиве needles) первой строки из needles, найденной в haystack. Возвращает 0, если ни одна из строк из needles не найдена. Поиск чувствителен к регистру. UInt64

Примеры

Пример использования

SELECT multiSearchFirstIndex('ClickHouse Database', ['Click', 'Database', 'Server']);
┌─multiSearchF⋯ 'Server'])─┐
│                        1 │
└──────────────────────────┘

Поведение с учетом регистра

SELECT multiSearchFirstIndex('ClickHouse Database', ['CLICK', 'Database', 'Server']);
┌─multiSearchF⋯ 'Server'])─┐
│                        2 │
└──────────────────────────┘

Совпадения не найдены

SELECT multiSearchFirstIndex('Hello World', ['goodbye', 'test']);
┌─multiSearchF⋯', 'test'])─┐
│                        0 │
└──────────────────────────┘

multiSearchFirstIndexCaseInsensitive

Добавлено в: v20.1

Возвращает индекс i (начиная с 1) шаблона needle_i, который расположен левее всех остальных найденных в строке haystack, или 0, если ни один шаблон не найден. Игнорирует регистр.

Синтаксис

multiSearchFirstIndexCaseInsensitive(haystack, [needle1, needle2, ..., needleN]

Аргументы

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

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

Возвращает индекс (начиная с 1) самой левой найденной подстроки needle. В противном случае — 0, если совпадение не найдено. UInt8

Примеры

Пример использования

SELECT multiSearchFirstIndexCaseInsensitive('hElLo WoRlD', ['World', 'Hello']);
┌─multiSearchF⋯, 'Hello'])─┐
│                        1 │
└──────────────────────────┘

multiSearchFirstIndexCaseInsensitiveUTF8

Впервые представлена в: v20.1

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

Синтаксис

multiSearchFirstIndexCaseInsensitiveUTF8(haystack, [needle1, needle2, ..., needleN])

Аргументы

  • haystack — строка, в которой выполняется поиск. String
  • needles — массив строк, которые нужно найти. Array(String)

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

Возвращает индекс, начинающийся с 1 (позицию в массиве needles) первой строки из needles, найденной в haystack. Возвращает 0, если ни одна из строк не найдена. Поиск регистронезависимый и учитывает кодировку символов UTF-8. UInt64

Примеры

Пример использования

SELECT multiSearchFirstIndexCaseInsensitiveUTF8('ClickHouse Database', ['CLICK', 'data', 'server']);
┌─multiSearchF⋯ 'server'])─┐
│                        1 │
└──────────────────────────┘

Учёт регистра в UTF-8

SELECT multiSearchFirstIndexCaseInsensitiveUTF8('Привет Мир', ['мир', 'ПРИВЕТ']);
┌─multiSearchF⋯ 'ПРИВЕТ'])─┐
│                        1 │
└──────────────────────────┘

Совпадений не найдено

SELECT multiSearchFirstIndexCaseInsensitiveUTF8('Hello World', ['goodbye', 'test']);
┌─multiSearchF⋯', 'test'])─┐
│                        0 │
└──────────────────────────┘

multiSearchFirstIndexUTF8

Добавлена в версии v20.1

Возвращает индекс i (начиная с 1) самой левой найденной needle&#95;i в строке haystack или 0, если совпадение не найдено. Предполагается, что haystack и needle — строки в кодировке UTF-8.

Синтаксис

multiSearchFirstIndexUTF8(haystack, [needle1, needle2, ..., needleN])

Аргументы

  • haystack — строка в кодировке UTF-8, в которой выполняется поиск. String
  • needle — массив подстрок в кодировке UTF-8, по которым выполняется поиск. Array(String)

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

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

Примеры

Пример использования

SELECT multiSearchFirstIndexUTF8('Здравствуйте мир', ['мир', 'здравствуйте']);
┌─multiSearchF⋯вствуйте'])─┐
│                        1 │
└──────────────────────────┘

multiSearchFirstPosition

Впервые представлена в: v20.1

Аналог функции position, но возвращает самое левое смещение в строке haystack, в котором совпадает хотя бы одна из нескольких строк needle.

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

Синтаксис

multiSearchFirstPosition(haystack, needle1[, needle2, ...])

Аргументы

  • haystack — строка, в которой выполняется поиск. String
  • needle1[, needle2, ...] — массив из одной или нескольких подстрок для поиска. Array(String)

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

Возвращает наименьшее смещение (считая слева) в строке haystack, с которого начинается совпадение с любой из подстрок needle; в противном случае — 0, если совпадений нет. UInt64

Примеры

Поиск первой позиции

SELECT multiSearchFirstPosition('Hello World',['llo', 'Wor', 'ld'])
┌─multiSearchFirstPosition('Hello World', ['llo', 'Wor', 'ld'])─┐
│                                                             3 │
└───────────────────────────────────────────────────────────────┘

multiSearchFirstPositionCaseInsensitive

Добавлена в версии: v20.1

Аналог multiSearchFirstPosition, но без учёта регистра.

Синтаксис

multiSearchFirstPositionCaseInsensitive(haystack, [needle1, needle2, ..., needleN])

Аргументы

  • haystack — строка, в которой выполняется поиск. String
  • needle — массив подстрок для поиска. Array(String)

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

Возвращает смещение от начала строки haystack, на котором обнаружено первое вхождение любой из подстрок массива needle. Возвращает 0, если совпадений нет. UInt64

Примеры

Первая позиция без учета регистра

SELECT multiSearchFirstPositionCaseInsensitive('HELLO WORLD',['wor', 'ld', 'ello'])
┌─multiSearchFirstPositionCaseInsensitive('HELLO WORLD', ['wor', 'ld', 'ello'])─┐
│                                                                             2 │
└───────────────────────────────────────────────────────────────────────────────┘

multiSearchFirstPositionCaseInsensitiveUTF8

Добавлена в версии: v20.1

Аналогична multiSearchFirstPosition, но предполагает, что haystack и needle — строки в кодировке UTF-8 и регистр символов не учитывается.

Синтаксис

multiSearchFirstPositionCaseInsensitiveUTF8(haystack, [needle1, needle2, ..., needleN])

Аргументы

  • haystack — строка в кодировке UTF-8, в которой выполняется поиск. String
  • needle — массив подстрок в кодировке UTF-8, по которым выполняется поиск. Array(String)

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

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

Примеры

Найти смещение самого левого вхождения в строке UTF-8 'Здравствуй, мир' ('Hello, world'), которое совпадает с любой из заданных подстрок

SELECT multiSearchFirstPositionCaseInsensitiveUTF8('Здравствуй, мир', ['МИР', 'вст', 'Здра'])
┌─multiSearchFirstPositionCaseInsensitiveUTF8('Здравствуй, мир', ['мир', 'вст', 'Здра'])─┐
│                                                                                      3 │
└────────────────────────────────────────────────────────────────────────────────────────┘

multiSearchFirstPositionUTF8

Добавлена в: v20.1

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

Синтаксис

multiSearchFirstPositionUTF8(haystack, [needle1, needle2, ..., needleN])

Аргументы

  • haystack — строка в кодировке UTF-8, в которой выполняется поиск. String
  • needle — массив подстрок в кодировке UTF-8, которые нужно найти. Array(String)

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

Смещение самого левого вхождения в строке haystack, которое совпадает с любой из строк needle. Возвращает 0, если совпадений нет. UInt64

Примеры

Найти смещение самого левого вхождения в строке UTF-8 'Здравствуй, мир' ('Hello, world'), которое совпадает с любой из заданных подстрок

SELECT multiSearchFirstPositionUTF8('Здравствуй, мир',['мир', 'вст', 'авст'])
┌─multiSearchFirstPositionUTF8('Здравствуй, мир', ['мир', 'вст', 'авст'])─┐
│                                                                       3 │
└─────────────────────────────────────────────────────────────────────────┘

ngramDistance

Впервые добавлена в: v20.1

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

Для поиска без учёта регистра и/или в формате UTF8 используйте функции ngramDistanceCaseInsensitive, ngramDistanceUTF8, ngramDistanceCaseInsensitiveUTF8.

Синтаксис

ngramDistance(haystack, needle)

Аргументы

  • haystack — строка для сравнения. String
  • needle — строка для сравнения. String

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

Возвращает число типа Float32 в диапазоне от 0 до 1. Чем меньше значение, тем более похожи строки. Float32

Примеры

Вычисление расстояния по 4-граммам

SELECT ngramDistance('ClickHouse', 'ClickHouses')
┌─ngramDistance('ClickHouse', 'ClickHouses')─┐
│                                        0.1 │
└────────────────────────────────────────────┘

ngramDistanceCaseInsensitive

Появилась в версии: v20.1

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

Синтаксис

ngramDistanceCaseInsensitive(haystack, needle)

Аргументы

  • haystack — первая сравниваемая строка. String
  • needle — вторая сравниваемая строка. String

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

Возвращает число типа Float32 в диапазоне от 0 до 1. Float32

Примеры

Регистронезависимое расстояние на основе 4-грамм

SELECT ngramDistanceCaseInsensitive('ClickHouse','clickhouse')
┌─ngramDistanceCaseInsensitive('ClickHouse','clickhouse')─┐
│                                                       0 │
└─────────────────────────────────────────────────────────┘

ngramDistanceCaseInsensitiveUTF8

Добавлено в версии: v20.1

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

Синтаксис

ngramDistanceCaseInsensitiveUTF8(haystack, needle)

Аргументы

  • haystack — первая строка для сравнения в кодировке UTF-8. String
  • needle — вторая строка для сравнения в кодировке UTF-8. String

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

Возвращает число типа Float32 в диапазоне от 0 до 1. Float32

Примеры

Регистронезависимое расстояние по 3-граммам для строк в UTF-8

SELECT ngramDistanceCaseInsensitiveUTF8('abcde','CDE')
┌─ngramDistanceCaseInsensitiveUTF8('abcde','CDE')─┐
│                                             0.5 │
└─────────────────────────────────────────────────┘

ngramDistanceUTF8

Введена в версии: v20.1

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

Синтаксис

ngramDistanceUTF8(haystack, needle)

Аргументы

  • haystack — первая строка для сравнения в кодировке UTF-8. String
  • needle — вторая строка для сравнения в кодировке UTF-8. String

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

Возвращает число типа Float32 в диапазоне от 0 до 1. Float32

Примеры

Расстояние по 3-граммам UTF-8

SELECT ngramDistanceUTF8('abcde','cde')
┌─ngramDistanceUTF8('abcde','cde')─┐
│                               0.5 │
└───────────────────────────────────┘

ngramSearch

Введена в версии v20.1

Проверяет, что 4-граммное расстояние между двумя строками меньше или равно заданному порогу.

Для поиска без учета регистра и/или в формате UTF-8 используйте функции ngramSearchCaseInsensitive, ngramSearchUTF8, ngramSearchCaseInsensitiveUTF8.

Синтаксис

ngramSearch(haystack, needle)

Аргументы

  • haystack — строка для сравнения. String
  • needle — строка для сравнения. String

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

Возвращает 1, если 4-граммное расстояние между строками меньше или равно пороговому значению (1.0 по умолчанию), в противном случае — 0. UInt8

Примеры

Поиск с использованием 4-грамм

SELECT ngramSearch('ClickHouse', 'Click')
┌─ngramSearch('ClickHouse', 'Click')─┐
│                                  1 │
└────────────────────────────────────┘

ngramSearchCaseInsensitive

Впервые появилась в: v20.1

Предоставляет регистронезависимый вариант ngramSearch. Вычисляет несимметричную разность между строкой-образцом (needle) и строкой, в которой выполняется поиск (haystack), то есть количество n-грамм из образца минус количество общих n-грамм, нормированное по количеству n-грамм в образце. Проверяет, что расстояние по 4-граммам между двумя строками меньше либо равно заданному порогу, игнорируя регистр.

Синтаксис

ngramSearchCaseInsensitive(haystack, needle)

Аргументы

  • haystack — Строка для сравнения. String
  • needle — Строка для сравнения. String

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

Возвращает 1, если 4-граммное расстояние между строками меньше либо равно порогу (1.0 по умолчанию), иначе 0. UInt8

Примеры

Поиск без учета регистра с использованием 4-грамм

SELECT ngramSearchCaseInsensitive('Hello World','hello')
┌─ngramSearchCaseInsensitive('Hello World','hello')─┐
│                                                  1 │
└────────────────────────────────────────────────────┘

ngramSearchCaseInsensitiveUTF8

Добавлена в версии: v20.1

Предоставляет регистронезависимый вариант функции ngramSearch для строк в кодировке UTF-8. Предполагает, что haystack и needle являются строками в кодировке UTF-8, и игнорирует регистр. Проверяет, что расстояние по 3-граммам между двумя строками UTF-8 не превышает заданный порог, игнорируя регистр.

Синтаксис

ngramSearchCaseInsensitiveUTF8(haystack, needle)

Аргументы

  • haystack — строка в кодировке UTF-8 для сравнения. String
  • needle — строка в кодировке UTF-8 для сравнения. String

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

Возвращает 1, если 3-граммное расстояние между строками меньше или равно порогу (1.0 по умолчанию), в противном случае — 0. UInt8

Примеры

Поиск в UTF-8 без учёта регистра с использованием 3-грамм

SELECT ngramSearchCaseInsensitiveUTF8('абвГДЕёжз', 'АбвгдЕЁжз')
┌─ngramSearchCaseInsensitiveUTF8('абвГДЕёжз', 'АбвгдЕЁжз')─┐
│                                                        1 │
└──────────────────────────────────────────────────────────┘

ngramSearchUTF8

Введена в версии v20.1

Предоставляет вариант функции ngramSearch для строк в кодировке UTF-8. Предполагается, что haystack и needle являются строками в кодировке UTF-8. Проверяет, что 3-граммное расстояние между двумя строками UTF-8 меньше или равно заданному порогу.

Синтаксис

ngramSearchUTF8(haystack, needle)

Аргументы

  • haystack — строка в кодировке UTF-8 для сравнения. String
  • needle — строка в кодировке UTF-8 для сравнения. String

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

Возвращает 1, если расстояние по 3-граммам между строками меньше или равно пороговому значению (по умолчанию 1.0), иначе 0. UInt8

Примеры

Поиск по строкам UTF-8 с использованием 3-грамм

SELECT ngramSearchUTF8('абвгдеёжз', 'гдеёзд')
┌─ngramSearchUTF8('абвгдеёжз', 'гдеёзд')─┐
│                                      1 │
└────────────────────────────────────────┘

notILike

Введена в версии v20.6

Проверяет, что строка не соответствует шаблону без учёта регистра. Шаблон может содержать специальные символы % и _ для сопоставления в стиле SQL LIKE.

Синтаксис

notILike(haystack, pattern)

Аргументы

  • haystack — входная строка, в которой выполняется поиск. String или FixedString
  • pattern — шаблон для оператора SQL LIKE. Символ % соответствует любому количеству символов (включая ноль), _ — ровно одному символу. String

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

Возвращает 1, если строка не соответствует шаблону (без учета регистра), в противном случае — 0. UInt8

Примеры

Пример использования

SELECT notILike('ClickHouse', '%house%');
┌─notILike('Cl⋯ '%house%')─┐
│                        0 │
└──────────────────────────┘

notLike

Введена в: v1.1

Аналог like, но с инвертированным результатом.

Синтаксис

notLike(haystack, pattern)
-- haystack NOT LIKE pattern

Аргументы

  • haystack — строка, в которой выполняется поиск. String или FixedString
  • pattern — шаблон LIKE для сравнения. String

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

Возвращает 1, если строка не соответствует шаблону LIKE, иначе 0. UInt8

Примеры

Пример использования

SELECT notLike('ClickHouse', '%House%');
┌─notLike('Cli⋯ '%House%')─┐
│                        0 │
└──────────────────────────┘

Отсутствие совпадения с шаблоном

SELECT notLike('ClickHouse', '%SQL%');
┌─notLike('Cli⋯', '%SQL%')─┐
│                        1 │
└──────────────────────────┘

position

Введена в: v1.1

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

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

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

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

Синтаксис

position(haystack, needle[, start_pos])

Аргументы

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

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

Возвращает начальную позицию в байтах (отсчёт с 1), если подстрока найдена, в противном случае 0. UInt64

Примеры

Базовое использование

SELECT position('Hello, world!', '!')
┌─position('Hello, world!', '!')─┐
│                             13 │
└────────────────────────────────┘

С аргументом start_pos

SELECT position('Hello, world!', 'o', 1), position('Hello, world!', 'o', 7)
┌─position('Hello, world!', 'o', 1)─┬─position('Hello, world!', 'o', 7)─┐
│                                 5 │                                 9 │
└───────────────────────────────────┴───────────────────────────────────┘

Синтаксис needle IN haystack

SELECT 6 = position('/' IN s) FROM (SELECT 'Hello/World' AS s)
┌─equals(6, position(s, '/'))─┐
│                           1 │
└─────────────────────────────┘

Пустая подстрока-образец

SELECT position('abc', ''), position('abc', '', 0), position('abc', '', 1), position('abc', '', 2), position('abc', '', 3), position('abc', '', 4), position('abc', '', 5)
┌─position('abc', '')─┬─position('abc', '', 0)─┬─position('abc', '', 1)─┬─position('abc', '', 2)─┬─position('abc', '', 3)─┬─position('abc', '', 4)─┬─position('abc', '', 5)─┐
│                   1 │                      1 │                      1 │                      2 │                      3 │                      4 │                      0 │
└─────────────────────┴────────────────────────┴────────────────────────┴────────────────────────┴────────────────────────┴────────────────────────┴────────────────────────┘

positionCaseInsensitive

Добавлена в версии v1.1

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

Синтаксис

positionCaseInsensitive(haystack, needle[, start_pos])

Псевдонимы: instr

Аргументы

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

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

Возвращает начальную позицию в байтах (нумерация с 1), если подстрока найдена, в противном случае — 0. UInt64

Примеры

Поиск без учета регистра

SELECT positionCaseInsensitive('Hello, world!', 'hello')
┌─positionCaseInsensitive('Hello, world!', 'hello')─┐
│                                                 1 │
└───────────────────────────────────────────────────┘

positionCaseInsensitiveUTF8

Добавлена в версии v1.1

Аналог функции positionUTF8, но выполняет поиск без учета регистра.

Синтаксис

positionCaseInsensitiveUTF8(haystack, needle[, start_pos])

Аргументы

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

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

Возвращает начальную позицию в байтах, считая с 1, если подстрока найдена, в противном случае — 0. UInt64

Примеры

Поиск в UTF-8 без учёта регистра

SELECT positionCaseInsensitiveUTF8('Привет мир', 'МИР')
┌─positionCaseInsensitiveUTF8('Привет мир', 'МИР')─┐
│                                                8 │
└──────────────────────────────────────────────────┘

positionUTF8

Добавлена в: v1.1

Аналог функции position, но предполагается, что haystack и needle — строки в кодировке UTF-8.

Синтаксис

positionUTF8(haystack, needle[, start_pos])

Аргументы

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

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

Возвращает начальную позицию в байтах, считая с 1, если подстрока была найдена; в противном случае — 0. UInt64

Примеры

Подсчёт символов в UTF-8

SELECT positionUTF8('Motörhead', 'r')
┌─position('Motörhead', 'r')─┐
│                          5 │
└────────────────────────────┘