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

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

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

Примечание

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

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 — входная строка, содержащая символы, подлежащие экранированию в регулярных выражениях (regex). String

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

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

Примеры

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

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 DISTINCT
    EventDate,
    replaceRegexpOne(toString(EventDate), '(\\d{4})-(\\d{2})-(\\d{2})', '\\2/\\3/\\1') AS res
FROM test.hits
LIMIT 7
FORMAT TabSeparated
2014-03-17      03/17/2014
2014-03-18      03/18/2014
2014-03-19      03/19/2014
2014-03-20      03/20/2014
2014-03-21      03/21/2014
2014-03-22      03/22/2014
2014-03-23      03/23/2014

Копирование строки 10 раз

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 в s заменяется вторым символом 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 │
└──────────────────┘