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

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

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

Примечание

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

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

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

Примечание

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

countMatches

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

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

Зависимость поведения от версии

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

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

Синтаксис

countMatches(строка, шаблон)

Аргументы

  • 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('test@clickhouse.com', '.*@(.*)$')
┌─extract('test@clickhouse.com', '.*@(.*)$')─┐
│ clickhouse.com                            │
└───────────────────────────────────────────┘

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

SELECT extract('test@clickhouse.com', 'no_match')
┌─extract('test@clickhouse.com', 'no_match')─┐
│                                            │
└────────────────────────────────────────────┘

extractAll

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

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

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

Синтаксис

extractAll(haystack, pattern)

Аргументы

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

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

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

Примеры

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

SELECT extractAll('привет 123 мир 456', '[0-9]+')
┌─extractAll('hello 123 world 456', '[0-9]+')─┐
│ ['123','456']                               │
└─────────────────────────────────────────────┘

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

SELECT extractAll('test@example.com, user@domain.org', '([a-zA-Z0-9]+)@')
┌─extractAll('test@example.com, user@domain.org', '([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 — количество захватывающих групп в регулярном выражении). Если совпадающих групп нет, возвращается пустой массив. 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

Примеры

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

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 должен быть определён текстовый индекс для оптимальной производительности. Если текстовый индекс не определён, функция выполняет полное сканирование столбца (brute-force), которое на порядки медленнее поиска по индексу.

Перед поиском функция выполняет токенизацию:

  • аргумента 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 │
└─────────┘

Сгенерируйте искомые строки с помощью функции 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, но предполагает, что и исходная строка, и образец закодированы в 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

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

Токен определяется как максимально возможная последовательность идущих подряд символов [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

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

Синтаксис

Аргументы

  • Нет аргументов.

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

Примеры

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 и 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.

Синтаксис

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('Привет, мир', 'Привет.*')
┌─match('Hello World', 'Hello.*')─┐
│                               1 │
└─────────────────────────────────┘

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

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

multiFuzzyMatchAllIndices

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

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

Синтаксис

multiFuzzyMatchAllIndices(искатель, расстояние, [шаблон1, шаблон2, ..., шаблонN])

Аргументы

  • 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, если любой из шаблонов совпадает со строкой с учётом заданного редакционного расстояния. Эта функция использует экспериментальную возможность библиотеки 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(стог_сена, расстояние, [шаблон1, шаблон2, ..., шаблонn])

Аргументы

  • 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(строка, шаблон1[, шаблон2, ...])

Аргументы

  • 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('Привет, мир!', ['привет', '!', 'мир'])
┌─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(строка, [шаблон1, шаблон2, ..., шаблонN])

Аргументы

  • 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(стог_сена, искомая1[, искомая2, ...])

Аргументы

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

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

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

Примеры

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

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

multiSearchAnyCaseInsensitive

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

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

Синтаксис

multiSearchAnyCaseInsensitive(строка, [подстрока1, подстрока2, ..., подстрокаN])

Аргументы

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

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

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

Примеры

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

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

multiSearchAnyCaseInsensitiveUTF8

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

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

Синтаксис

multiSearchAnyCaseInsensitiveUTF8(иглаВСтоге, [игла1, игла2, ..., иглаN])

Аргументы

  • 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

Примеры

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

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

multiSearchFirstIndex

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

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

Синтаксис

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

Аргументы

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

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

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

Примеры

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

SELECT multiSearchFirstIndex('База данных ClickHouse', ['Click', 'Database', 'Server']);
┌─multiSearchF⋯ 'Server'])─┐
│                        1 │
└──────────────────────────┘

Чувствительность к регистру

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

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

SELECT multiSearchFirstIndex('Привет, мир', ['прощай', 'тест']);
┌─multiSearchF⋯', 'test'])─┐
│                        0 │
└──────────────────────────┘

multiSearchFirstIndexCaseInsensitive

Введено в: v20.1

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

Синтаксис

multiSearchFirstIndexCaseInsensitive(струя, [игла1, игла2, ..., иглаN]

Аргументы

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

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

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

Примеры

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

SELECT multiSearchFirstIndexCaseInsensitive('пРиВеТ МиР', ['мир', 'привет']);
┌─multiSearchF⋯, 'Hello'])─┐
│                        1 │
└──────────────────────────┘

multiSearchFirstIndexCaseInsensitiveUTF8

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

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

Синтаксис

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

Аргументы

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

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

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

Примеры

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

SELECT multiSearchFirstIndexCaseInsensitiveUTF8('База данных ClickHouse', ['CLICK', 'data', 'server']);
┌─multiSearchF⋯ 'server'])─┐
│                        1 │
└──────────────────────────┘

Обработка регистра символов UTF-8

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

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

SELECT multiSearchFirstIndexCaseInsensitiveUTF8('Привет, мир', ['до свидания', 'тест']);
┌─multiSearchF⋯', 'test'])─┐
│                        0 │
└──────────────────────────┘

multiSearchFirstIndexUTF8

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

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

Синтаксис

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

Аргументы

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

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

Возвращает индекс (начиная с 1) самой левой найденной подстроки из массива needle. В противном случае — 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(строка, [подстрока1, подстрока2, ..., подстрокаN])

Аргументы

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

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

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

Примеры

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

SELECT multiSearchFirstPositionCaseInsensitive('ПРИВЕТ МИР',['мир', 'ир', 'рив'])
┌─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-грамм и нормализует её, деля на сумму их мощностей. Чем меньше возвращаемое значение, тем более похожи строки.

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

Синтаксис

ngramDistance(строка_искания, подстрока)

Аргументы

  • 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

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

Синтаксис

ngramDistanceCaseInsensitiveUTF8(haystack, needle)

Аргументы

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

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

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

Примеры

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

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 — строка для сравнения. 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-грамм в needle минус количество общих n-грамм), нормированное на количество n-грамм в needle. Проверяет, что расстояние по 4-граммам между двумя строками меньше или равно заданному порогу, игнорируя регистр.

Синтаксис

ngramSearchCaseInsensitive(строка, подстрока)

Аргументы

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

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

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

Примеры

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

SELECT ngramSearchCaseInsensitive('Привет, мир','привет')
┌─ngramSearchCaseInsensitive('Hello World','hello')─┐
│                                                  1 │
└────────────────────────────────────────────────────┘

ngramSearchCaseInsensitiveUTF8

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

Предоставляет регистронезависимый UTF-8‑вариант функции ngramSearch. Предполагается, что 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 НЕ СООТВЕТСТВУЕТ шаблону pattern (NOT LIKE)

Аргументы

  • 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('Привет, мир!', 'привет')─┐
│                                                 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 — Строка, в которой выполняется поиск. String или Enum
  • needle — Подстрока, которую нужно найти. String
  • start_pos — Необязательный параметр. Позиция в haystack, с которой начинается поиск (нумерация с 1). UInt*

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

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

Примеры

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

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