Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Функции замены строк

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

format

Добавленный в: v20.1.0

Форматирует строку pattern значениями (строками, целыми числами и т. д.), перечисленными в аргументах, аналогично форматированию в Python. Строка шаблона может содержать поля подстановки, заключённые в фигурные скобки {}. Всё, что не заключено в скобки, считается буквальным текстом и копируется в выходную строку без изменений. Буквальные символы фигурных скобок можно экранировать двойными скобками: {{ и }}. Именами полей могут быть числа (начиная с нуля) или пустые значения (в этом случае им неявно присваиваются последовательно возрастающие номера).

Синтаксис

format(pattern, s0[, s1, ...])

Аргументы

  • pattern — Строка форматирования, содержащая плейсхолдеры. String
  • s0[, s1, ...] — Одно или несколько значений для подстановки в шаблон. Any

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

Возвращает отформатированную строку. String

Примеры

Нумерованные плейсхолдеры

SELECT format('{1} {0} {1}', 'World', 'Hello')
┌─format('{1} {0} {1}', 'World', 'Hello')─┐
│ Hello World Hello                       │
└─────────────────────────────────────────┘

Неявная нумерация

SELECT format('{} {}', 'Hello', 'World')
┌─format('{} {}', 'Hello', 'World')─┐
│ Hello World                       │
└───────────────────────────────────┘

overlay

Добавленный в: v24.9.0

Заменяет часть строки input на другую строку replace, начиная с индекса offset (нумерация с 1).

Синтаксис

overlay(s, replace, offset[, length])

Аргументы

  • s — Входная строка. String
  • replace — Строка замены. const String
  • offset — Целочисленный тип Int (нумерация с 1). Если offset отрицательный, отсчёт ведётся от конца строки s. Int
  • length — Необязательно. Целочисленный тип Int. length задаёт длину фрагмента во входной строке s, который нужно заменить. Если length не указана, количество байтов, удаляемых из s, равно длине replace; в противном случае удаляется length байтов. Int

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

Возвращает строку с выполненной заменой. String

Примеры

Простая замена

SELECT overlay('My father is from Mexico.', 'mother', 4) AS res;
┌─res───────────────────────┐
│ My mother is from Mexico. │
└───────────────────────────┘

Замена с указанием длины

SELECT overlay('My father is from Mexico.', 'dad', 4, 6) AS res;
┌─res────────────────────┐
│ My dad is from Mexico. │
└────────────────────────┘

overlayUTF8

Добавленный в: v24.9.0

Заменяет часть строки s на другую строку replace, начиная с индекса offset, отсчитываемого от 1. Предполагается, что строка содержит корректный текст в кодировке UTF-8. Если это предположение нарушено, исключение не генерируется, а результат не определён.

Синтаксис

overlayUTF8(s, replace, offset[, length])

Аргументы

  • s — Входная строка. String
  • replace — Строка замены. const String
  • offset — Целочисленный тип Int (нумерация начинается с 1). Если offset отрицательный, отсчёт ведётся от конца входной строки s. (U)Int*
  • length — Необязательный параметр. Задаёт длину фрагмента входной строки s, который нужно заменить. Если length не указан, количество символов, удаляемых из s, равно длине replace; в противном случае удаляется length символов. (U)Int*

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

Возвращает строку с заменённым фрагментом. String

Примеры

Замена UTF-8

SELECT overlayUTF8('Mein Vater ist aus Österreich.', 'der Türkei', 20) AS res;
┌─res────────────────────────────┐
│ Mein Vater ist aus der Türkei. │
└────────────────────────────────┘

printf

Добавленный в: v24.8.0

Функция printf форматирует заданную строку значениями (строками, целыми числами, числами с плавающей точкой и т. д.), перечисленными в аргументах, аналогично функции printf в C++. Строка формата может содержать спецификаторы формата, начинающиеся с символа %. Всё, что не является % и следующим за ним спецификатором формата, считается литеральным текстом и копируется в результат как есть. Литеральный символ % можно экранировать с помощью %%. Строка формата может быть как константой, так и выражением столбца, что позволяет использовать разные шаблоны формата для каждой строки.

Синтаксис

printf(format[, sub1, sub2, ...])

Аргументы

  • format — Строка формата со спецификаторами %. String
  • sub1, sub2, ... — Необязательный параметр. Одно или несколько значений для подстановки в строку формата. Any

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

Возвращает отформатированную строку. String

Примеры

Форматирование в стиле C++

SELECT printf('%%%s %s %d', 'Hello', 'World', 2024);
┌─printf('%%%s %s %d', 'Hello', 'World', 2024)─┐
│ %Hello World 2024                            │
└──────────────────────────────────────────────┘

regexpQuoteMeta

Добавленный в: v20.1.0

Добавляет обратную косую черту перед следующими символами, имеющими специальное значение в регулярных выражениях: \0, \\, |, (, ), ^, $, ., [, ], ?, *, +, {, :, -. Эта реализация немного отличается от re2::RE2::QuoteMeta. Нулевой байт экранируется как \0 вместо \x00, при этом экранируются только необходимые символы.

Синтаксис

regexpQuoteMeta(s)

Аргументы

  • s — Входная строка, содержащая символы, которые нужно экранировать в регулярном выражении. String

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

Возвращает строку, в которой экранированы специальные символы регулярного выражения. String

Примеры

Экранирование специальных символов регулярного выражения

SELECT regexpQuoteMeta('Hello. [World]? (Yes)*') AS res
┌─res───────────────────────────┐
│ Hello\. \[World\]\? \(Yes\)\* │
└───────────────────────────────┘

replaceAll

Добавленный в: v1.1.0

Заменяет все вхождения шаблона регулярного выражения pattern в строке haystack на строку replacement.

Синтаксис

replaceAll(haystack, pattern, replacement)

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

Аргументы

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

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

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

Примеры

Заменить все вхождения

SELECT replaceAll('Hello, Hello world', 'Hello', 'Hi') AS res;
┌─res──────────┐
│ Hi, Hi world │
└──────────────┘

replaceOne

Добавленный в: v1.1.0

Заменяет первое вхождение подстроки pattern в строке haystack на строку replacement.

Синтаксис

replaceOne(haystack, pattern, replacement)

Аргументы

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

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

Возвращает строку, в которой заменено первое совпадение с шаблоном регулярного выражения. String

Примеры

Замена первого вхождения

SELECT replaceOne('Hello, Hello world', 'Hello', 'Hi') AS res;
┌─res─────────────┐
│ Hi, Hello world │
└─────────────────┘

replaceRegexpAll

Добавленный в: v1.1.0

Как и replaceRegexpOne, но заменяет все вхождения шаблона регулярного выражения. В качестве исключения: если регулярное выражение сработало на пустой подстроке, замена выполняется не более одного раза.

Синтаксис

replaceRegexpAll(haystack, pattern, replacement)

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

Аргументы

  • haystack — Входная строка, в которой выполняется поиск. String
  • pattern — Шаблон регулярного выражения, который нужно найти. const String
  • replacement — Строка, которой заменяется шаблон регулярного выражения; может содержать подстановки. const String

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

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

Примеры

Заменить все символы на удвоенные

SELECT replaceRegexpAll('Hello123', '.', '\\0\\0') AS res
┌─res──────────────┐
│ HHeelllloo112233 │
└──────────────────┘

Пример замены пустой подстроки

SELECT replaceRegexpAll('Hello, World!', '^', 'here: ') AS res
┌─res─────────────────┐
│ here: Hello, World! │
└─────────────────────┘

replaceRegexpOne

Добавленный в: v1.1.0

Заменяет первое вхождение подстроки в haystack, соответствующее шаблону регулярного выражения pattern (в синтаксисе re2), на строку replacement. replacement может содержать подстановки \0-\9. Подстановки \1-\9 соответствуют 1-й–9-й захватывающим группам (подсовпадениям), а подстановка \0 — всему совпадению. Чтобы использовать буквальный символ \ в строках pattern или replacement, экранируйте его с помощью \. Также имейте в виду, что строковые литералы требуют дополнительного экранирования.

Синтаксис

replaceRegexpOne(haystack, pattern, replacement)

Аргументы

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

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

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

Примеры

Преобразование дат ISO в американский формат

SELECT replaceRegexpOne(d, '(\\d{4})-(\\d{2})-(\\d{2})', '\\2/\\3/\\1') AS res
FROM values('d String', '2014-03-17', '2014-03-18', '2014-03-19')
┌─res────────┐
│ 03/17/2014 │
│ 03/18/2014 │
│ 03/19/2014 │
└────────────┘

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

SELECT replaceRegexpOne('Hello, World!', '.*', '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0') AS res
┌─res────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World! │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

translate

Добавленный в: v22.7.0

Заменяет символы в строке s на основе посимвольного соответствия, заданного строками from и to. from и to должны быть константными ASCII-строками. Если from и to имеют одинаковую длину, каждое вхождение первого символа из from в s заменяется первым символом из to, каждого второго символа из from — вторым символом из to и так далее. Если from содержит больше символов, чем to, все вхождения символов в конце from, для которых нет соответствующего символа в to, удаляются из s. Символы не из ASCII в s функцией не изменяются.

Синтаксис

translate(s, from, to)

Аргументы

  • s — Входная строка для преобразования. String
  • from — Константная строка ASCII, содержащая символы для замены. const String
  • to — Константная строка ASCII, содержащая символы-замены. const String

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

Возвращает строку с заменёнными символами. String

Примеры

Сопоставление символов

SELECT translate('Hello, World!', 'delor', 'DELOR') AS res
┌─res───────────┐
│ HELLO, WORLD! │
└───────────────┘

Различная длина

SELECT translate('clickhouse', 'clickhouse', 'CLICK') AS res
┌─res───┐
│ CLICK │
└───────┘

translateUTF8

Добавленный в: v22.7.0

Как translate, но предполагается, что s, from и to — строки в кодировке UTF-8.

Синтаксис

translateUTF8(s, from, to)

Аргументы

  • s — входная UTF-8-строка для преобразования. String
  • from — константная UTF-8-строка, содержащая символы для замены. const String
  • to — константная UTF-8-строка, содержащая символы, на которые выполняется замена. const String

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

Возвращает значение типа данных String. String

Примеры

Преобразование символов UTF-8

SELECT translateUTF8('Münchener Straße', 'üß', 'us') AS res;
┌─res──────────────┐
│ Munchener Strase │
└──────────────────┘
Navigation