Общие функции для работы со строками и функции поиска в строках описаны отдельно.
format
Добавленный в: v20.1.0
Форматирует строку pattern значениями (строками, целыми числами и т. д.), перечисленными в аргументах, аналогично форматированию в Python.
Строка шаблона может содержать поля подстановки, заключённые в фигурные скобки {}.
Всё, что не заключено в скобки, считается буквальным текстом и копируется в выходную строку без изменений.
Буквальные символы фигурных скобок можно экранировать двойными скобками: {{ и }}.
Именами полей могут быть числа (начиная с нуля) или пустые значения (в этом случае им неявно присваиваются последовательно возрастающие номера).
Синтаксис
format(pattern, s0[, s1, ...])Аргументы
pattern— Строка форматирования, содержащая плейсхолдеры.Strings0[, 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— Входная строка.Stringreplace— Строка замены.const Stringoffset— Целочисленный типInt(нумерация с 1). Еслиoffsetотрицательный, отсчёт ведётся от конца строкиs.Intlength— Необязательно. Целочисленный тип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— Входная строка.Stringreplace— Строка замены.const Stringoffset— Целочисленный тип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— Строка формата со спецификаторами%.Stringsub1, 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— Входная строка, в которой выполняется поиск.Stringpattern— Шаблон регулярного выражения, который нужно найти и заменить.const Stringreplacement— Строка, которой заменяется найденная подстрока.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— Входная строка, в которой выполняется поиск.Stringpattern— Шаблон регулярного выражения, который нужно найти и заменить.const Stringreplacement— Строка, на которую заменяется найденный фрагмент.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— Входная строка, в которой выполняется поиск.Stringpattern— Шаблон регулярного выражения, который нужно найти.const Stringreplacement— Строка, которой заменяется шаблон регулярного выражения; может содержать подстановки.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— Входная строка для поиска.Stringpattern— Шаблон регулярного выражения для поиска.const Stringreplacement— Строка, на которую заменяется найденное совпадение; может содержать подстановки.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— Входная строка для преобразования.Stringfrom— Константная строка ASCII, содержащая символы для замены.const Stringto— Константная строка 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-строка для преобразования.Stringfrom— константная UTF-8-строка, содержащая символы для замены.const Stringto— константная UTF-8-строка, содержащая символы, на которые выполняется замена.const String
Возвращаемое значение
Возвращает значение типа данных String. String
Примеры
Преобразование символов UTF-8
SELECT translateUTF8('Münchener Straße', 'üß', 'us') AS res;┌─res──────────────┐
│ Munchener Strase │
└──────────────────┘