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

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

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

Примечание

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

format

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

Форматирует строку шаблона 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

Заменяет часть строки 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('Мой отец из Мексики.', 'мать', 4) AS res;
┌─res──────────────────────┐
│ Моя мама из Мексики.     │
└──────────────────────────┘

Замена с заданной длиной

SELECT overlay('Мой отец родом из Мексики.', 'папа', 5, 8) AS res;
┌─res───────────────────┐
│ Мой отец из Мексики.│
└───────────────────────┘

overlayUTF8

Появилась в версии: v24.9

Заменяет часть строки 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

Функция 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, \\, |, (, ), ^, $, ., [, ], ?, *, +, {, :, -. Эта реализация незначительно отличается от 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

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

Синтаксис

replaceAll(haystack, pattern, replacement)

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

Аргументы

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

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

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

Примеры

Замена всех вхождений

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

replaceOne

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

Заменяет первое вхождение подстроки 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─────────────┐
│ Привет, Hello world │
└─────────────────┘

replaceRegexpAll

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

Аналог функции 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─────────────────┐
│ здесь: Привет, мир! │
└─────────────────────┘

replaceRegexpOne

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

Заменяет первое вхождение подстроки в 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

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

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!Привет, мир! │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

translate

Впервые появилась в: v22.7

Заменяет символы в строке 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('Привет, мир!', 'delor', 'DELOR') AS res
┌─res───────────┐
│ HELLO, WORLD! │
└───────────────┘

Разная длина

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

translateUTF8

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

Аналог 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 │
└──────────────────┘