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

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

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

empty

Проверяет, является ли входная строка пустой. Строка считается непустой, если она содержит хотя бы один байт, даже если этот байт является пробелом или нулевым байтом.

Функция также доступна для массивов и UUID.

Синтаксис

empty(x)

Аргументы

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

  • Возвращает 1 для пустой строки или 0 для непустой строки. UInt8.

Пример

SELECT empty('');

Результат:

┌─empty('')─┐
│         1 │
└───────────┘

notEmpty

Проверяет, является ли входная строка непустой. Строка считается непустой, если она содержит хотя бы один байт, даже если этот байт является пробелом или нулевым байтом.

Функция также доступна для массивов и UUID.

Синтаксис

notEmpty(x)

Аргументы

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

  • Возвращает 1 для непустой строки или 0 для пустой строки. UInt8.

Пример

SELECT notEmpty('text');

Результат:

┌─notEmpty('text')─┐
│                1 │
└──────────────────┘

length

Возвращает длину строки в байтах, а не в символах или кодовых точках Unicode. Функция также работает для массивов.

Псевдоним: OCTET_LENGTH

Синтаксис

length(s)

Параметры

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

  • Длина строки или массива s в байтах. UInt64.

Пример

Запрос:

SELECT length('Hello, world!');

Результат:

┌─length('Hello, world!')─┐
│                      13 │
└─────────────────────────┘

Запрос:

SELECT length([1, 2, 3, 4]);

Результат:

┌─length([1, 2, 3, 4])─┐
│                    4 │
└──────────────────────┘

lengthUTF8

Возвращает длину строки в кодовых точках Unicode, а не в байтах или символах. Предполагает, что строка содержит действительный текст, закодированный в UTF-8. Если это предположение нарушено, исключение не будет выброшено, и результат будет неопределенным.

Псевдонимы:

  • CHAR_LENGTH
  • CHARACTER_LENGTH

Синтаксис

lengthUTF8(s)

Параметры

  • s — Строка, содержащая действительный текст, закодированный в UTF-8. Строка.

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

  • Длина строки s в кодовых точках Unicode. UInt64.

Пример

Запрос:

SELECT lengthUTF8('Здравствуй, мир!');

Результат:

┌─lengthUTF8('Здравствуй, мир!')─┐
│                             16 │
└────────────────────────────────┘

left

Возвращает подстроку строки s с заданным offset, начиная слева.

Синтаксис

left(s, offset)

Параметры

  • s — Строка, из которой вычисляется подстрока. Строка или FixedString.
  • offset — Число байтов смещения. (U)Int*.

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

  • Для положительного offset: Подстрока s с offset количеством байтов, начиная слева.
  • Для отрицательного offset: Подстрока s с length(s) - |offset| байт, начиная слева.
  • Пустая строка, если length равен 0.

Пример

Запрос:

SELECT left('Hello', 3);

Результат:

Hel

Запрос:

SELECT left('Hello', -3);

Результат:

He

leftUTF8

Возвращает подстроку UTF-8 закодированной строки s с заданным offset, начиная слева.

Синтаксис

leftUTF8(s, offset)

Параметры

  • s — Строка, закодированная в UTF-8, из которой вычисляется подстрока. Строка или FixedString.
  • offset — Число байтов смещения. (U)Int*.

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

  • Для положительного offset: Подстрока s с offset количеством байтов, начиная слева.
  • Для отрицательного offset: Подстрока s с length(s) - |offset| байт, начиная слева.
  • Пустая строка, если length равен 0.

Пример

Запрос:

SELECT leftUTF8('Привет', 4);

Результат:

Прив

Запрос:

SELECT leftUTF8('Привет', -4);

Результат:

Пр

leftPad

Дополняет строку слева пробелами или заданной строкой (несколько раз, если необходимо), пока результирующая строка не достигнет заданной length.

Синтаксис

leftPad(string, length[, pad_string])

Псевдоним: LPAD

Аргументы

  • string — Входная строка, которую нужно дополнить. Строка.
  • length — Длина результирующей строки. UInt или Int. Если значение меньше длины входной строки, то входная строка будет сокращена до length символов.
  • pad_string — Строка, которой нужно дополнить входную строку. Строка. Необязательный. Если не указана, то входная строка дополняется пробелами.

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

  • Строка, дополненная слево заданной длины. Строка.

Пример

SELECT leftPad('abc', 7, '*'), leftPad('def', 7);

Результат:

┌─leftPad('abc', 7, '*')─┬─leftPad('def', 7)─┐
│ ****abc                │     def           │
└────────────────────────┴───────────────────┘

leftPadUTF8

Дополняет строку слева пробелами или заданной строкой (несколько раз, если необходимо), пока результирующая строка не достигнет заданной длины. В отличие от leftPad, который измеряет длину строки в байтах, длина строки измеряется в кодовых точках.

Синтаксис

leftPadUTF8(string, length[, pad_string])

Аргументы

  • string — Входная строка, которую нужно дополнить. Строка.
  • length — Длина результирующей строки. UInt или Int. Если значение меньше длины входной строки, то входная строка будет сокращена до length символов.
  • pad_string — Строка, которой нужно дополнить входную строку. Строка. Необязательный. Если не указана, то входная строка дополняется пробелами.

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

  • Строка, дополненная слева заданной длины. Строка.

Пример

SELECT leftPadUTF8('абвг', 7, '*'), leftPadUTF8('дежз', 7);

Результат:

┌─leftPadUTF8('абвг', 7, '*')─┬─leftPadUTF8('дежз', 7)─┐
│ ***абвг                     │    дежз                │
└─────────────────────────────┴────────────────────────┘

Возвращает подстроку строки s с заданным offset, начиная справа.

Синтаксис

right(s, offset)

Параметры

  • s — Строка, из которой вычисляется подстрока. Строка или FixedString.
  • offset — Число байтов смещения. (U)Int*.

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

  • Для положительного offset: Подстрока s с offset количеством байтов, начиная справа.
  • Для отрицательного offset: Подстрока s с length(s) - |offset| байт, начиная справа.
  • Пустая строка, если length равен 0.

Пример

Запрос:

SELECT right('Hello', 3);

Результат:

llo

Запрос:

SELECT right('Hello', -3);

Результат:

lo

rightUTF8

Возвращает подстроку UTF-8 закодированной строки s с заданным offset, начиная справа.

Синтаксис

rightUTF8(s, offset)

Параметры

  • s — UTF-8 закодированная строка, из которой вычисляется подстрока. Строка или FixedString.
  • offset — Число байтов смещения. (U)Int*.

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

  • Для положительного offset: Подстрока s с offset количеством байтов, начиная справа.
  • Для отрицательного offset: Подстрока s с length(s) - |offset| байт, начиная справа.
  • Пустая строка, если length равен 0.

Пример

Запрос:

SELECT rightUTF8('Привет', 4);

Результат:

ивет

Запрос:

SELECT rightUTF8('Привет', -4);

Результат:

ет

rightPad

Дополняет строку справа пробелами или заданной строкой (несколько раз, если необходимо), пока результирующая строка не достигнет заданной length.

Синтаксис

rightPad(string, length[, pad_string])

Псевдоним: RPAD

Аргументы

  • string — Входная строка, которую нужно дополнить. Строка.
  • length — Длина результирующей строки. UInt или Int. Если значение меньше длины входной строки, то входная строка будет сокращена до length символов.
  • pad_string — Строка, которой нужно дополнить входную строку. Строка. Необязательный. Если не указана, то входная строка дополняется пробелами.

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

  • Строка, дополненная справа заданной длины. Строка.

Пример

SELECT rightPad('abc', 7, '*'), rightPad('abc', 7);

Результат:

┌─rightPad('abc', 7, '*')─┬─rightPad('abc', 7)─┐
│ abc****                 │ abc                │
└─────────────────────────┴────────────────────┘

rightPadUTF8

Дополняет строку справа пробелами или заданной строкой (несколько раз, если необходимо), пока результирующая строка не достигнет заданной длины. В отличие от rightPad, который измеряет длину строки в байтах, длина строки измеряется в кодовых точках.

Синтаксис

rightPadUTF8(string, length[, pad_string])

Аргументы

  • string — Входная строка, которую нужно дополнить. Строка.
  • length — Длина результирующей строки. UInt или Int. Если значение меньше длины входной строки, то входная строка будет сокращена до length символов.
  • pad_string — Строка, которой нужно дополнить входную строку. Строка. Необязательный. Если не указана, то входная строка дополняется пробелами.

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

  • Строка, дополненная справа заданной длины. Строка.

Пример

SELECT rightPadUTF8('абвг', 7, '*'), rightPadUTF8('абвг', 7);

Результат:

┌─rightPadUTF8('абвг', 7, '*')─┬─rightPadUTF8('абвг', 7)─┐
│ абвг***                      │ абвг                    │
└──────────────────────────────┴─────────────────────────┘

compareSubstrings

Сравнивает две строки лексикографически.

Синтаксис

compareSubstrings(string1, string2, string1_offset, string2_offset, num_bytes);

Аргументы

  • string1 — Первая строка для сравнения. Строка
  • string2 - Вторая строка для сравнения. Строка
  • string1_offset — Позиция (индекс с нуля) в string1, с которой начинается сравнение. UInt*.
  • string2_offset — Позиция (индекс с нуля) в string2, с которой начинается сравнение. UInt*.
  • num_bytes — Максимальное количество байтов для сравнения в обеих строках. Если string_offset + num_bytes превышает конец входной строки, num_bytes будет сокращено соответственно. UInt*.

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

  • -1 — Если string1[string1_offset : string1_offset + num_bytes] < string2[string2_offset : string2_offset + num_bytes].
  • 0 — Если string1[string1_offset : string1_offset + num_bytes] = string2[string2_offset : string2_offset + num_bytes].
  • 1 — Если string1[string1_offset : string1_offset + num_bytes] > string2[string2_offset : string2_offset + num_bytes].

Пример

Запрос:

SELECT compareSubstrings('Saxony', 'Anglo-Saxon', 0, 6, 5) AS result,

Результат:

┌─result─┐
│      0 │
└────────┘

lower

Преобразует символы латинского алфавита ASCII в строке в строчные.

Синтаксис

lower(input)

Псевдоним: lcase

Параметры

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

Пример

Запрос:

SELECT lower('CLICKHOUSE');
┌─lower('CLICKHOUSE')─┐
│ clickhouse          │
└─────────────────────┘

upper

Преобразует символы латинского алфавита ASCII в строке в прописные.

Синтаксис

upper(input)

Псевдоним: ucase

Параметры

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

Примеры

Запрос:

SELECT upper('clickhouse');
┌─upper('clickhouse')─┐
│ CLICKHOUSE          │
└─────────────────────┘

lowerUTF8

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

примечание

Не определяет язык, например, для турецкого языка результат может быть не совсем корректным (i/İ против i/I). Если длина последовательности байтов UTF-8 различна для прописных и строчных букв кодовой точки (таких как и ß), результат может быть некорректным для этой кодовой точки.

Синтаксис

lowerUTF8(input)

Параметры

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

Пример

Запрос:

SELECT lowerUTF8('MÜNCHEN') AS Lowerutf8;

Результат:

┌─Lowerutf8─┐
│ münchen   │
└───────────┘

upperUTF8

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

примечание

Не определяет язык, например, для турецкого языка результат может быть не совсем корректным (i/İ против i/I). Если длина последовательности байтов UTF-8 различна для прописных и строчных букв кодовой точки (таких как и ß), результат может быть некорректным для этой кодовой точки.

Синтаксис

upperUTF8(input)

Параметры

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

Пример

Запрос:

SELECT upperUTF8('München') AS Upperutf8;

Результат:

┌─Upperutf8─┐
│ MÜNCHEN   │
└───────────┘

isValidUTF8

Возвращает 1, если набор байтов представляет собой действительный текст, закодированный в UTF-8, в противном случае 0.

Синтаксис

isValidUTF8(input)

Параметры

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

  • Возвращает 1, если набор байтов представляет собой действительный текст, закодированный в UTF-8, в противном случае 0.

Запрос:

SELECT isValidUTF8('\xc3\xb1') AS valid, isValidUTF8('\xc3\x28') AS invalid;

Результат:

┌─valid─┬─invalid─┐
│     1 │       0 │
└───────┴─────────┘

toValidUTF8

Заменяет недействительные символы UTF-8 на символ (U+FFFD). Все подряд идущие недействительные символы объединяются в один заменяющий символ.

Синтаксис

toValidUTF8(input_string)

Аргументы

  • input_string — Любой набор байтов, представленный как объект типа Строка.

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

  • Действительная строка UTF-8.

Пример

SELECT toValidUTF8('\x61\xF0\x80\x80\x80b');
┌─toValidUTF8('a����b')─┐
│ a�b                   │
└───────────────────────┘

repeat

Конкатенирует строку с самой собой столько раз, сколько указано.

Синтаксис

repeat(s, n)

Псевдоним: REPEAT

Аргументы

  • s — Строка, которую нужно повторить. Строка.
  • n — Количество повторов строки. UInt* или Int*.

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

Строка, содержащая строку s, повторенную n раз. Если n <= 0, функция возвращает пустую строку. Строка.

Пример

SELECT repeat('abc', 10);

Результат:

┌─repeat('abc', 10)──────────────┐
│ abcabcabcabcabcabcabcabcabcabc │
└────────────────────────────────┘

space

Конкатенирует пробел ( ) столько раз, сколько указано.

Синтаксис

space(n)

Псевдоним: SPACE.

Аргументы

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

Строка, содержащая строку , повторенную n раз. Если n <= 0, функция возвращает пустую строку. Строка.

Пример

Запрос:

SELECT space(3);

Результат:

┌─space(3) ────┐
│              │
└──────────────┘

reverse

Обращает последовательность байтов в строке.

reverseUTF8

Обращает последовательность кодовых точек Unicode в строке. Предполагает, что строка содержит действительный текст, закодированный в UTF-8. Если это предположение нарушено, исключение не будет выброшено, и результат будет неопределенным.

concat

Конкатенирует заданные аргументы.

Синтаксис

concat(s1, s2, ...)

Аргументы

Значения произвольного типа.

Аргументы, которые не относятся к типам Строка или FixedString, конвертируются в строки с использованием их стандартной сериализации. Так как это снижает производительность, не рекомендуется использовать аргументы, отличные от String/FixedString.

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

Строка, созданная путем конкатенации аргументов.

Если любое из аргументов является NULL, функция возвращает NULL.

Пример

Запрос:

SELECT concat('Hello, ', 'World!');

Результат:

┌─concat('Hello, ', 'World!')─┐
│ Hello, World!               │
└─────────────────────────────┘

Запрос:

SELECT concat(42, 144);

Результат:

┌─concat(42, 144)─┐
│ 42144           │
└─────────────────┘
примечание
|| оператор

Используйте оператор || для конкатенации строк в качестве компактной альтернативы concat(). Например, 'Hello, ' || 'World!' эквивалентно concat('Hello, ', 'World!').

concatAssumeInjective

Как и concat, но предполагает, что concat(s1, s2, ...) → sn инъективен. Може быть использован для оптимизации GROUP BY.

Функция называется инъективной, если она возвращает разные результаты для различных аргументов. Другими словами: разные аргументы никогда не дают одинакового результата.

Синтаксис

concatAssumeInjective(s1, s2, ...)

Аргументы

Значения типа String или FixedString.

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

Строка, созданная путем конкатенации аргументов.

Если любое из значений аргумента является NULL, функция возвращает NULL.

Пример

Таблица входных данных:

CREATE TABLE key_val(`key1` String, `key2` String, `value` UInt32) ENGINE = TinyLog;
INSERT INTO key_val VALUES ('Hello, ','World',1), ('Hello, ','World',2), ('Hello, ','World!',3), ('Hello',', World!',2);
SELECT * from key_val;
┌─key1────┬─key2─────┬─value─┐
│ Hello,  │ World    │     1 │
│ Hello,  │ World    │     2 │
│ Hello,  │ World!   │     3 │
│ Hello   │ , World! │     2 │
└─────────┴──────────┴───────┘
SELECT concat(key1, key2), sum(value) FROM key_val GROUP BY concatAssumeInjective(key1, key2);

Результат:

┌─concat(key1, key2)─┬─sum(value)─┐
│ Hello, World!      │          3 │
│ Hello, World!      │          2 │
│ Hello, World       │          3 │
└────────────────────┴────────────┘

concatWithSeparator

Конкатенирует заданные строки с заданным разделителем.

Синтаксис

concatWithSeparator(sep, expr1, expr2, expr3...)

Псевдоним: concat_ws

Аргументы

  • sep — разделитель. Постоянная Строка или FixedString.
  • exprN — выражение для конкатенации. Аргументы, которые не относятся к типам Строка или FixedString, конвертируются в строки с использованием их стандартной сериализации. Так как это снижает производительность, не рекомендуется использовать аргументы, отличные от String/FixedString.

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

Строка, созданная путем конкатенации аргументов.

Если любое из значений аргумента является NULL, функция возвращает NULL.

Пример

SELECT concatWithSeparator('a', '1', '2', '3', '4')

Результат:

┌─concatWithSeparator('a', '1', '2', '3', '4')─┐
│ 1a2a3a4                                      │
└──────────────────────────────────────────────┘

concatWithSeparatorAssumeInjective

Как concatWithSeparator, но предполагает, что concatWithSeparator(sep, expr1, expr2, expr3...) → result инъективен. Може быть использован для оптимизации GROUP BY.

Функция называется инъективной, если она возвращает разные результаты для различных аргументов. Другими словами: разные аргументы никогда не дают одинакового результата.

substring

Возвращает подстроку строки s, которая начинается с указанного байтового индекса offset. Подсчет байтов начинается с 1. Если offset равен 0, возвращается пустая строка. Если offset отрицательный, подстрока начинается с pos символов от конца строки, а не от начала. Необязательный аргумент length задает максимальное количество байтов, которые может иметь возвращаемая подстрока.

Синтаксис

substring(s, offset[, length])

Псевдонимы:

  • substr
  • mid
  • byteSlice

Аргументы

  • s — Строка, из которой вычисляется подстрока. Строка, FixedString или Enum.
  • offset — Начальная позиция подстроки в s. (U)Int*.
  • length — Максимальная длина подстроки. (U)Int*. Необязательный.

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

Подстрока s с длиной length, начиная с индекса offset. Строка.

Пример

SELECT 'database' AS db, substr(db, 5), substr(db, 5, 1)

Результат:

┌─db───────┬─substring('database', 5)─┬─substring('database', 5, 1)─┐
│ database │ base                     │ b                           │
└──────────┴──────────────────────────┴─────────────────────────────┘

substringUTF8

Возвращает подстроку строки s, которая начинается с указанного байтового индекса offset для кодовых точек Unicode. Подсчет байтов начинается с 1. Если offset равен 0, возвращается пустая строка. Если offset отрицательный, подстрока начинается с pos символов от конца строки, а не от начала. Необязательный аргумент length задает максимальное количество байтов, которые может иметь возвращаемая подстрока.

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

Синтаксис

substringUTF8(s, offset[, length])

Аргументы

  • s — Строка, из которой вычисляется подстрока. Строка, FixedString или Enum.
  • offset — Начальная позиция подстроки в s. (U)Int*.
  • length — Максимальная длина подстроки. (U)Int*. Необязательный.

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

Подстрока s с длиной length, начиная с индекса offset.

Детали реализации

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

Пример

SELECT 'Täglich grüßt das Murmeltier.' AS str,
       substringUTF8(str, 9),
       substringUTF8(str, 9, 5)
Täglich grüßt das Murmeltier.    grüßt das Murmeltier.    grüßt

substringIndex

Возвращает подстроку s до count вхождений разделителя delim, как в Spark или MySQL.

Синтаксис

substringIndex(s, delim, count)

Псевдоним: SUBSTRING_INDEX

Аргументы

  • s — Строка, из которой извлекается подстрока. Строка.
  • delim — Символ для разбиения. Строка.
  • count — Количество вхождений разделителя для учета перед извлечением подстроки. Если count положительный, возвращается все слева от последнего разделителя (учитывая с левой стороны). Если count отрицательный, возвращается все справа от последнего разделителя (учитывая с правой стороны). UInt или Int

Пример

SELECT substringIndex('www.clickhouse.com', '.', 2)

Результат:

┌─substringIndex('www.clickhouse.com', '.', 2)─┐
│ www.clickhouse                               │
└──────────────────────────────────────────────┘

substringIndexUTF8

Возвращает подстроку s до count вхождений разделителя delim, специально для кодовых точек Unicode.

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

Синтаксис

substringIndexUTF8(s, delim, count)

Аргументы

  • s — Строка, из которой извлекается подстрока. Строка.
  • delim — Символ для разбиения. Строка.
  • count — Количество вхождений разделителя для учета перед извлечением подстроки. Если count положительный, возвращается все слева от последнего разделителя (учитывая с левой стороны). Если count отрицательный, возвращается все справа от последнего разделителя (учитывая с правой стороны). UInt или Int

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

Подстрока Строка s до count вхождений delim.

Детали реализации

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

Пример

SELECT substringIndexUTF8('www.straßen-in-europa.de', '.', 2)
www.straßen-in-europa

appendTrailingCharIfAbsent

Добавляет символ c в строку s, если s непустая и не заканчивается символом c.

Синтаксис

appendTrailingCharIfAbsent(s, c)

convertCharset

Возвращает строку s, преобразованную из кодировки from в кодировку to.

Синтаксис

convertCharset(s, from, to)

base32Encode

Кодирует строку с использованием Base32.

Синтаксис

base32Encode(plaintext)

Аргументы

  • plaintextСтрока колонка или константа.

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

  • Строка, содержащая закодированное значение аргумента. Строка или FixedString.

Пример

SELECT base32Encode('Encoded');

Результат:

┌─base32Encode('Encoded')─┐
│ IVXGG33EMVSA====        │
└─────────────────────────┘

base32Decode

Принимает строку и декодирует ее с использованием схемы кодирования Base32.

Синтаксис

base32Decode(encoded)

Аргументы

  • encodedСтрока или FixedString. Если строка не является допустимым значением, закодированным в Base32, выбрасывается исключение.

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

  • Строка, содержащая декодированное значение аргумента. Строка.

Пример

SELECT base32Decode('IVXGG33EMVSA====');

Результат:

┌─base32Decode('IVXGG33EMVSA====')─┐
│ Encoded                          │
└──────────────────────────────────┘

tryBase32Decode

Как base32Decode, но возвращает пустую строку в случае ошибки.

Синтаксис

tryBase32Decode(encoded)

Параметры

  • encoded: Строка или FixedString. Если строка не является допустимым значением, закодированным в Base32, возвращает пустую строку в случае ошибки.

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

  • Строка, содержащая декодированное значение аргумента.

Примеры

Запрос:

SELECT tryBase32Decode('IVXGG33EMVSA====') AS res, tryBase32Decode('invalid') AS res_invalid;
┌─res─────┬─res_invalid─┐
│ Encoded │             │
└─────────┴─────────────┘

base58Encode

Кодирует строку с использованием Base58 в алфавите "Bitcoin".

Синтаксис

base58Encode(plaintext)

Аргументы

  • plaintextСтрока колонка или константа.

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

  • Строка, содержащая закодированное значение аргумента. Строка или FixedString.

Пример

SELECT base58Encode('Encoded');

Результат:

┌─base58Encode('Encoded')─┐
│ 3dc8KtHrwM              │
└─────────────────────────┘

base58Decode

Принимает строку и декодирует ее с использованием схемы кодирования Base58 с использованием алфавита "Bitcoin".

Синтаксис

base58Decode(encoded)

Аргументы

  • encodedСтрока или FixedString. Если строка не является допустимым значением, закодированным в Base58, выбрасывается исключение.

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

  • Строка, содержащая декодированное значение аргумента. Строка.

Пример

SELECT base58Decode('3dc8KtHrwM');

Результат:

┌─base58Decode('3dc8KtHrwM')─┐
│ Encoded                    │
└────────────────────────────┘

tryBase58Decode

Как base58Decode, но возвращает пустую строку в случае ошибки.

Синтаксис

tryBase58Decode(encoded)

Параметры

  • encoded: Строка или FixedString. Если строка не является допустимым значением, закодированным в Base58, возвращает пустую строку в случае ошибки.

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

  • Строка, содержащая декодированное значение аргумента.

Примеры

Запрос:

SELECT tryBase58Decode('3dc8KtHrwM') AS res, tryBase58Decode('invalid') AS res_invalid;
┌─res─────┬─res_invalid─┐
│ Encoded │             │
└─────────┴─────────────┘

base64Encode

Закодирует строку или FixedString в base64 в соответствии с RFC 4648.

Псевдоним: TO_BASE64.

Синтаксис

base64Encode(plaintext)

Аргументы

  • plaintextСтрока колонка или константа.

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

  • Строка, содержащая закодированное значение аргумента.

Пример

SELECT base64Encode('clickhouse');

Результат:

┌─base64Encode('clickhouse')─┐
│ Y2xpY2tob3VzZQ==           │
└────────────────────────────┘

base64URLEncode

Кодирует URL (Строка или FixedString) в base64 с модификациями, специфичными для URL, в соответствии с RFC 4648.

Синтаксис

base64URLEncode(url)

Аргументы

  • urlСтрока колонка или константа.

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

  • Строка, содержащая закодированное значение аргумента.

Пример

SELECT base64URLEncode('https://clickhouse.com');

Результат:

┌─base64URLEncode('https://clickhouse.com')─┐
│ aHR0cDovL2NsaWNraG91c2UuY29t              │
└───────────────────────────────────────────┘

base64Decode

Принимает строку и декодирует ее из base64 в соответствии с RFC 4648. Выбрасывает исключение в случае ошибки.

Псевдоним: FROM_BASE64.

Синтаксис

base64Decode(encoded)

Аргументы

  • encodedСтрока колонка или константа. Если строка не является допустимым значением, закодированным в Base64, выбрасывается исключение.

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

  • Строка, содержащая декодированное значение аргумента.

Пример

SELECT base64Decode('Y2xpY2tob3VzZQ==');

Результат:

┌─base64Decode('Y2xpY2tob3VzZQ==')─┐
│ clickhouse                       │
└──────────────────────────────────┘

base64URLDecode

Принимает URL, закодированный в base64, и декодирует его из base64 с модификациями, специфичными для URL, в соответствии с RFC 4648. Выбрасывает исключение в случае ошибки.

Синтаксис

base64URLDecode(encodedUrl)

Аргументы

  • encodedURLСтрока колонка или константа. Если строка не является допустимым значением, закодированным в Base64 с модификациями, специфичными для URL, выбрасывается исключение.

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

  • Строка, содержащая декодированное значение аргумента.

Пример

SELECT base64URLDecode('aHR0cDovL2NsaWNraG91c2UuY29t');

Результат:

┌─base64URLDecode('aHR0cDovL2NsaWNraG91c2UuY29t')─┐
│ https://clickhouse.com                          │
└─────────────────────────────────────────────────┘

tryBase64Decode

Как base64Decode, но возвращает пустую строку в случае ошибки.

Синтаксис

tryBase64Decode(encoded)

Аргументы

  • encodedСтрока колонка или константа. Если строка не является допустимым значением, закодированным в Base64, возвращает пустую строку.

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

  • Строка, содержащая декодированное значение аргумента.

Примеры

Запрос:

SELECT tryBase64Decode('RW5jb2RlZA==') AS res, tryBase64Decode('invalid') AS res_invalid;
┌─res────────┬─res_invalid─┐
│ clickhouse │             │
└────────────┴─────────────┘

tryBase64URLDecode

Как base64URLDecode, но возвращает пустую строку в случае ошибки.

Синтаксис

tryBase64URLDecode(encodedUrl)

Параметры

  • encodedURLСтрока колонка или константа. Если строка не является допустимым значением, закодированным в Base64 с модификациями, специфичными для URL, возвращает пустую строку.

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

  • Строка, содержащая декодированное значение аргумента.

Примеры

Запрос:

SELECT tryBase64URLDecode('aHR0cDovL2NsaWNraG91c2UuY29t') AS res, tryBase64Decode('aHR0cHM6Ly9jbGlja') AS res_invalid;
┌─res────────────────────┬─res_invalid─┐
│ https://clickhouse.com │             │
└────────────────────────┴─────────────┘

endsWith

Возвращает, заканчивается ли строка str на suffix.

Синтаксис

endsWith(str, suffix)

endsWithUTF8

Возвращает, заканчивается ли строка str на suffix. Разница между endsWithUTF8 и endsWith заключается в том, что endsWithUTF8 сравнивает str и suffix по символам UTF-8.

Синтаксис

endsWithUTF8(str, suffix)

Пример

SELECT endsWithUTF8('中国', '\xbd'), endsWith('中国', '\xbd')

Результат:

┌─endsWithUTF8('中国', '½')─┬─endsWith('中国', '½')─┐
│                        0 │                    1 │
└──────────────────────────┴──────────────────────┘

startsWith

Возвращает, начинается ли строка str на prefix.

Синтаксис

startsWith(str, prefix)

Пример

SELECT startsWith('Spider-Man', 'Spi');

startsWithUTF8

Available in version 23.8 and later

Возвращает, начинается ли строка str на prefix. Разница между startsWithUTF8 и startsWith заключается в том, что startsWithUTF8 сравнивает str и prefix по символам UTF-8.

Пример

SELECT startsWithUTF8('中国', '\xe4'), startsWith('中国', '\xe4')

Результат:

┌─startsWithUTF8('中国', '⥩─┬─startsWith('中国', '⥩─┐
│                          0 │                      1 │
└────────────────────────────┴────────────────────────┘

trim

Удаляет указанные символы с начала или конца строки. Если не указано иное, функция удаляет пробелы (ASCII-символ 32).

Синтаксис

trim([[LEADING|TRAILING|BOTH] trim_character FROM] input_string)

Аргументы

  • trim_character — Символы для обрезки. Строка.
  • input_string — Строка для обрезки. Строка.

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

Строка без начальных и/или конечных указанных символов. Строка.

Пример

SELECT trim(BOTH ' ()' FROM '(   Hello, world!   )');

Результат:

┌─trim(BOTH ' ()' FROM '(   Hello, world!   )')─┐
│ Hello, world!                                 │
└───────────────────────────────────────────────┘

trimLeft

Удаляет последовательные вхождения пробелов (ASCII-символ 32) с начала строки.

Синтаксис

trimLeft(input_string[, trim_characters])

Псевдоним: ltrim.

Аргументы

  • input_string — Строка для обрезки. Строка.
  • trim_characters — Символы для обрезки. Необязательный. Строка. Если не указано, используется ' ' (одинарный пробел) в качестве символа для обрезки.

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

Строка без начальных общих пробелов. Строка.

Пример

SELECT trimLeft('     Hello, world!     ');

Результат:

┌─trimLeft('     Hello, world!     ')─┐
│ Hello, world!                       │
└─────────────────────────────────────┘

trimRight

Удаляет последовательные пробелы (ASCII-символ 32) в конце строки.

Синтаксис

trimRight(input_string[, trim_characters])

Псевдоним: rtrim.

Аргументы

  • input_string — Строка, которую нужно обрезать. String.
  • trim_characters — Символы для обрезки. Необязательный. String. Если не указано, используется ' ' (один пробел) в качестве символа обрезки.

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

Строка без завершающих пробелов. String.

Пример

SELECT trimRight('     Hello, world!     ');

Результат:

┌─trimRight('     Hello, world!     ')─┐
│      Hello, world!                   │
└──────────────────────────────────────┘

trimBoth

Удаляет последовательные пробелы (ASCII-символ 32) с обоих концов строки.

Синтаксис

trimBoth(input_string[, trim_characters])

Псевдоним: trim.

Аргументы

  • input_string — Строка, которую нужно обрезать. String.
  • trim_characters — Символы для обрезки. Необязательный. String. Если не указано, используется ' ' (один пробел) в качестве символа обрезки.

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

Строка без начальных и конечных пробелов. String.

Пример

SELECT trimBoth('     Hello, world!     ');

Результат:

┌─trimBoth('     Hello, world!     ')─┐
│ Hello, world!                       │
└─────────────────────────────────────┘

CRC32

Возвращает контрольную сумму CRC32 строки, используя полином CRC-32-IEEE 802.3 и начальное значение 0xffffffff (реализация zlib).

Тип результата — UInt32.

CRC32IEEE

Возвращает контрольную сумму CRC32 строки, используя полином CRC-32-IEEE 802.3.

Тип результата — UInt32.

CRC64

Возвращает контрольную сумму CRC64 строки, используя полином CRC-64-ECMA.

Тип результата — UInt64.

normalizeUTF8NFC

Преобразует строку в нормализованную форму NFC, предполагая, что строка является корректно закодированным текстом в UTF8.

Синтаксис

normalizeUTF8NFC(words)

Аргументы

  • words — Входная строка в кодировке UTF8. String.

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

  • Строка, преобразованная в нормализованную форму NFC. String.

Пример

SELECT length('â'), normalizeUTF8NFC('â') AS nfc, length(nfc) AS nfc_len;

Результат:

┌─length('â')─┬─nfc─┬─nfc_len─┐
│           2 │ â   │       2 │
└─────────────┴─────┴─────────┘

normalizeUTF8NFD

Преобразует строку в нормализованную форму NFD, предполагая, что строка является корректно закодированным текстом в UTF8.

Синтаксис

normalizeUTF8NFD(words)

Аргументы

  • words — Входная строка в кодировке UTF8. String.

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

  • Строка, преобразованная в нормализованную форму NFD. String.

Пример

SELECT length('â'), normalizeUTF8NFD('â') AS nfd, length(nfd) AS nfd_len;

Результат:

┌─length('â')─┬─nfd─┬─nfd_len─┐
│           2 │ â   │       3 │
└─────────────┴─────┴─────────┘

normalizeUTF8NFKC

Преобразует строку в нормализованную форму NFKC, предполагая, что строка является корректно закодированным текстом в UTF8.

Синтаксис

normalizeUTF8NFKC(words)

Аргументы

  • words — Входная строка в кодировке UTF8. String.

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

  • Строка, преобразованная в нормализованную форму NFKC. String.

Пример

SELECT length('â'), normalizeUTF8NFKC('â') AS nfkc, length(nfkc) AS nfkc_len;

Результат:

┌─length('â')─┬─nfkc─┬─nfkc_len─┐
│           2 │ â    │        2 │
└─────────────┴──────┴──────────┘

normalizeUTF8NFKD

Преобразует строку в нормализованную форму NFKD, предполагая, что строка является корректно закодированным текстом в UTF8.

Синтаксис

normalizeUTF8NFKD(words)

Аргументы

  • words — Входная строка в кодировке UTF8. String.

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

  • Строка, преобразованная в нормализованную форму NFKD. String.

Пример

SELECT length('â'), normalizeUTF8NFKD('â') AS nfkd, length(nfkd) AS nfkd_len;

Результат:

┌─length('â')─┬─nfkd─┬─nfkd_len─┐
│           2 │ â    │        3 │
└─────────────┴──────┴──────────┘

encodeXMLComponent

Экранирует символы со специальным значением в XML, чтобы их можно было вставить в текстовый узел XML или атрибут.

Следующие символы заменяются: <, &, >, ", '. Также см. список символов и HTML-сущностей XML.

Синтаксис

encodeXMLComponent(x)

Аргументы

  • x — Входная строка. String.

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

  • Экранированная строка. String.

Пример

SELECT encodeXMLComponent('Hello, "world"!');
SELECT encodeXMLComponent('<123>');
SELECT encodeXMLComponent('&clickhouse');
SELECT encodeXMLComponent('\'foo\'');

Результат:

Hello, &quot;world&quot;!
&lt;123&gt;
&amp;clickhouse
&apos;foo&apos;

decodeXMLComponent

Декодирует подстроки со специальным значением в XML. Эти подстроки: &quot; &amp; &apos; &gt; &lt;

Эта функция также заменяет числовые символы-ссылки на символы Юникода. Поддерживаются как десятичные (например, &#10003;), так и шестнадцатеричные (&#x2713;) формы.

Синтаксис

decodeXMLComponent(x)

Аргументы

  • x — Входная строка. String.

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

  • Декодированная строка. String.

Пример

SELECT decodeXMLComponent('&apos;foo&apos;');
SELECT decodeXMLComponent('&lt; &#x3A3; &gt;');

Результат:

'foo'
< Σ >

decodeHTMLComponent

Декодирует подстроки со специальным значением в HTML. Например: &hbar; &gt; &diamondsuit; &heartsuit; &lt; и др.

Эта функция также заменяет числовые символы-ссылки на символы Юникода. Поддерживаются как десятичные (например, &#10003;), так и шестнадцатеричные (&#x2713;) формы.

Синтаксис

decodeHTMLComponent(x)

Аргументы

  • x — Входная строка. String.

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

  • Декодированная строка. String.

Пример

SELECT decodeHTMLComponent(''CH');
SELECT decodeHTMLComponent('I&heartsuit;ClickHouse');

Результат:

'CH'
I♥ClickHouse'

extractTextFromHTML

Эта функция извлекает простой текст из HTML или XHTML.

Она не соответствует на 100% спецификации HTML, XML или XHTML, но реализация достаточно точная и быстрая. Правила следующие:

  1. Комментарии пропускаются. Пример: <!-- test -->. Комментарий должен заканчиваться на -->. Вложенные комментарии не допускаются. Примечание: конструкции типа <!--> и <!---> не являются допустимыми комментариями в HTML, но они пропускаются другими правилами.
  2. CDATA вставляется без изменений. Примечание: CDATA специфичен для XML/XHTML и обрабатывается на основе «лучших усилий».
  3. Элементы script и style удаляются вместе со всем их содержимым. Примечание: предполагается, что закрывающий тег не может появиться внутри содержимого. Например, в строковом литерале JS его необходимо экранировать как "<\/script>". Примечание: комментарии и CDATA могут быть внутри script или style — тогда закрывающие теги не ищутся внутри CDATA. Пример: <script><![CDATA[</script>]]></script>. Но их все равно ищут внутри комментариев. Иногда это становится сложным: <script>var x = "<!--"; </script> var y = "-->"; alert(x + y);</script> Примечание: script и style могут быть именами XML-пространств — в этом случае они не обрабатываются как обычные элементы script или style. Пример: <script:a>Hello</script:a>. Примечание: пробелы могут присутствовать после закрывающего имени тега: </script >, но не перед ним: < / script>.
  4. Другие теги или элементы, похожие на теги, пропускаются без внутреннего содержания. Пример: <a>.</a> Примечание: предполагается, что этот HTML является недопустимым: <a test=">"></a> Примечание: она также пропускает что-то похожее на теги: <>, <!>, и т.д. Примечание: тег без окончания пропускается до конца ввода: <hello
  5. HTML и XML-сущности не декодируются. Они должны обрабатываться отдельной функцией.
  6. Пробелы в тексте сжимаются или вставляются по определенным правилам.
    • Пробелы в начале и в конце удаляются.
    • Последовательные пробелы сжимаются.
    • Но если текст разделен другими элементами и нет пробела, он вставляется.
    • Это может привести к неестественным примерам: Hello<b>world</b>, Hello<!-- -->world — в HTML нет пробела, но функция вставляет его. Также рассмотрите: Hello<p>world</p>, Hello<br>world. Это поведение разумно для анализа данных, например, для преобразования HTML в мешок слов.
  7. Также стоит отметить, что корректная обработка пробелов требует поддержки свойств CSS <pre></pre>, display и white-space.

Синтаксис

extractTextFromHTML(x)

Аргументы

  • x — входной текст. String.

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

  • Извлеченный текст. String.

Пример

Первый пример содержит несколько тегов и комментарий и также показывает обработку пробелов. Второй пример показывает обработку CDATA и тега script. В третьем примере текст извлекается из полного HTML-ответа, полученного с помощью функции url.

SELECT extractTextFromHTML(' <p> A text <i>with</i><b>tags</b>. <!-- comments --> </p> ');
SELECT extractTextFromHTML('<![CDATA[The content within <b>CDATA</b>]]> <script>alert("Script");</script>');
SELECT extractTextFromHTML(html) FROM url('http://www.donothingfor2minutes.com/', RawBLOB, 'html String');

Результат:

A text with tags .
The content within <b>CDATA</b>
Do Nothing for 2 Minutes 2:00 &nbsp;

ascii

Возвращает ASCII-код (как Int32) первого символа строки s.

Если s пустая, результат равен 0. Если первый символ не является ASCII-символом или не попадает в диапазон дополнения Latin-1 кодировки UTF-16, результат неопределен.

Синтаксис

ascii(s)

soundex

Возвращает код Soundex строки.

Синтаксис

soundex(val)

Аргументы

  • val — Входное значение. String

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

  • Код Soundex входного значения. String

Пример

SELECT soundex('aksel');

Результат:

┌─soundex('aksel')─┐
│ A240             │
└──────────────────┘

punycodeEncode

Возвращает представление Punycode строки. Строка должна быть закодирована в UTF8, иначе поведение неопределенно.

Синтаксис

punycodeEncode(val)

Аргументы

  • val — Входное значение. String

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

  • Представление Punycode входного значения. String

Пример

SELECT punycodeEncode('München');

Результат:

┌─punycodeEncode('München')─┐
│ Mnchen-3ya                │
└───────────────────────────┘

punycodeDecode

Возвращает текстовое представление (в кодировке UTF8) строки, закодированной в Punycode. Если задана недопустимая строка, закодированная в Punycode, возникает исключение.

Синтаксис

punycodeEncode(val)

Аргументы

  • val — Строка, закодированная в Punycode. String

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

  • Текстовое представление входного значения. String

Пример

SELECT punycodeDecode('Mnchen-3ya');

Результат:

┌─punycodeDecode('Mnchen-3ya')─┐
│ München                      │
└──────────────────────────────┘

tryPunycodeDecode

Как punycodeDecode, но возвращает пустую строку, если недопустимая строка, закодированная в Punycode, не предоставляется.

idnaEncode

Возвращает ASCII-представление (алгоритм ToASCII) доменного имени в соответствии с механизмом Международные доменные имена в приложениях (IDNA). Входная строка должна быть закодирована в UTF и должна быть преобразована в строку ASCII, иначе возникает исключение. Примечание: Процентное декодирование или обрезка табуляций, пробелов или управляющих символов не выполняются.

Синтаксис

idnaEncode(val)

Аргументы

  • val — Входное значение. String

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

  • ASCII-представление в соответствии с механизмом IDNA входного значения. String

Пример

SELECT idnaEncode('straße.münchen.de');

Результат:

┌─idnaEncode('straße.münchen.de')─────┐
│ xn--strae-oqa.xn--mnchen-3ya.de     │
└─────────────────────────────────────┘

tryIdnaEncode

Как idnaEncode, но возвращает пустую строку в случае ошибки вместо выброса исключения.

idnaDecode

Возвращает Юникодное (UTF-8) представление (алгоритм ToUnicode) доменного имени в соответствии с механизмом Международные доменные имена в приложениях (IDNA). В случае ошибки (например, если вход неправильный) входная строка возвращается. Обратите внимание, что повторное применение idnaEncode() и idnaDecode() не обязательно возвращает исходную строку из-за нормализации регистра.

Синтаксис

idnaDecode(val)

Аргументы

  • val — Входное значение. String

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

  • Юникодное (UTF-8) представление в соответствии с механизмом IDNA входного значения. String

Пример

SELECT idnaDecode('xn--strae-oqa.xn--mnchen-3ya.de');

Результат:

┌─idnaDecode('xn--strae-oqa.xn--mnchen-3ya.de')─┐
│ straße.münchen.de                             │
└───────────────────────────────────────────────┘

byteHammingDistance

Вычисляет расстояние Хэмминга между двумя байтовыми строками.

Синтаксис

byteHammingDistance(string1, string2)

Примеры

SELECT byteHammingDistance('karolin', 'kathrin');

Результат:

┌─byteHammingDistance('karolin', 'kathrin')─┐
│                                         3 │
└───────────────────────────────────────────┘

Псевдоним: mismatches

stringJaccardIndex

Вычисляет индекс сходства Джекара между двумя байтовыми строками.

Синтаксис

stringJaccardIndex(string1, string2)

Примеры

SELECT stringJaccardIndex('clickhouse', 'mouse');

Результат:

┌─stringJaccardIndex('clickhouse', 'mouse')─┐
│                                       0.4 │
└───────────────────────────────────────────┘

stringJaccardIndexUTF8

Как stringJaccardIndex, но для строк, закодированных в UTF8.

editDistance

Вычисляет расстояние редактирования между двумя байтовыми строками.

Синтаксис

editDistance(string1, string2)

Примеры

SELECT editDistance('clickhouse', 'mouse');

Результат:

┌─editDistance('clickhouse', 'mouse')─┐
│                                   6 │
└─────────────────────────────────────┘

Псевдоним: levenshteinDistance

editDistanceUTF8

Вычисляет расстояние редактирования между двумя строками в кодировке UTF8.

Синтаксис

editDistanceUTF8(string1, string2)

Примеры

SELECT editDistanceUTF8('我是谁', '我是我');

Результат:

┌─editDistanceUTF8('我是谁', '我是我')──┐
│                                   1 │
└─────────────────────────────────────┘

Псевдоним: levenshteinDistanceUTF8

damerauLevenshteinDistance

Вычисляет расстояние Дамерау-Левенштейна между двумя байтовыми строками.

Синтаксис

damerauLevenshteinDistance(string1, string2)

Примеры

SELECT damerauLevenshteinDistance('clickhouse', 'mouse');

Результат:

┌─damerauLevenshteinDistance('clickhouse', 'mouse')─┐
│                                                 6 │
└───────────────────────────────────────────────────┘

jaroSimilarity

Вычисляет сходство Яро между двумя байтовыми строками.

Синтаксис

jaroSimilarity(string1, string2)

Примеры

SELECT jaroSimilarity('clickhouse', 'click');

Результат:

┌─jaroSimilarity('clickhouse', 'click')─┐
│                    0.8333333333333333 │
└───────────────────────────────────────┘

jaroWinklerSimilarity

Вычисляет сходство Яро-Уинклера между двумя байтовыми строками.

Синтаксис

jaroWinklerSimilarity(string1, string2)

Примеры

SELECT jaroWinklerSimilarity('clickhouse', 'click');

Результат:

┌─jaroWinklerSimilarity('clickhouse', 'click')─┐
│                           0.8999999999999999 │
└──────────────────────────────────────────────┘

initcap

Преобразует первую букву каждого слова в верхний регистр, а остальные — в нижний. Слова — это последовательности буквенно-цифровых символов, разделенные не буквенно-цифровыми символами.

примечание

Поскольку initCap преобразует только первую букву каждого слова в верхний регистр, вы можете наблюдать неожиданное поведение для слов, содержащих апострофы или заглавные буквы. Например:

SELECT initCap('mother''s daughter'), initCap('joe McAdam');

возвращает

┌─initCap('mother\'s daughter')─┬─initCap('joe McAdam')─┐
│ Mother'S Daughter             │ Joe Mcadam            │
└───────────────────────────────┴───────────────────────┘

Это известное поведение, и в настоящее время нет планов по его исправлению.

Синтаксис

initcap(val)

Аргументы

  • val — Входное значение. String.

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

  • val с первой буквой каждого слова, преобразованной в верхний регистр. String.

Пример

Запрос:

SELECT initcap('building for fast');

Результат:

┌─initcap('building for fast')─┐
│ Building For Fast            │
└──────────────────────────────┘

initcapUTF8

Как initcap, initcapUTF8 преобразует первую букву каждого слова в верхний регистр, а остальные — в нижний. Предполагает, что строка содержит корректный текст, закодированный в UTF-8. Если это предположение нарушено, исключение не выбрасывается, и результат неопределен.

примечание

Эта функция не определяет язык, например, для турецкого результат может быть не совсем корректным (i/İ vs. i/I). Если длина байтовой последовательности UTF-8 отличается для верхнего и нижнего регистра определенной кодовой точки, результат может быть неправильным для этой кодовой точки.

Синтаксис

initcapUTF8(val)

Аргументы

  • val — Входное значение. String.

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

  • val с первой буквой каждого слова, преобразованной в верхний регистр. String.

Пример

Запрос:

SELECT initcapUTF8('не тормозит');

Результат:

┌─initcapUTF8('не тормозит')─┐
│ Не Тормозит                │
└────────────────────────────┘

firstLine

Возвращает первую строку из многострочной строки.

Синтаксис

firstLine(val)

Аргументы

  • val — Входное значение. String

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

  • Первая строка входного значения или всё значение, если нет разделителей строк. String

Пример

SELECT firstLine('foo\nbar\nbaz');

Результат:

┌─firstLine('foo\nbar\nbaz')─┐
│ foo                        │
└────────────────────────────┘

stringCompare

Сравнивает две строки лексикографически.

Синтаксис

stringCompare(string1, string2[, str1_off, string2_offset, num_bytes]);

Аргументы

  • string1 — Первая строка для сравнения. String
  • string2 - Вторая строка для сравнения. String
  • string1_offset — Позиция (с нуля) в string1, с которой начинается сравнение. Необязательный, положительное число.
  • string2_offset — Позиция (индекс с нуля) в string2, с которой начинается сравнение. Необязательный, положительное число.
  • num_bytes — Максимальное количество байтов для сравнения в обеих строках. Если string_offset + num_bytes превышает конец входной строки, num_bytes будет уменьшено соответственно.

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

  • -1 — Если string1[string1_offset: string1_offset + num_bytes] < string2[string2_offset:string2_offset + num_bytes] и string1_offset < len(string1) и string2_offset < len(string2). Если string1_offset >= len(string1) и string2_offset < len(string2).
  • 0 — Если string1[string1_offset: string1_offset + num_bytes] = string2[string2_offset:string2_offset + num_bytes] и string1_offset < len(string1) и string2_offset < len(string2). Если string1_offset >= len(string1) и string2_offset >= len(string2).
  • 1 — Если string1[string1_offset: string1_offset + num_bytes] > string2[string2_offset:string2_offset + num_bytes] и string1_offset < len(string1) и string2_offset < len(string2). Если string1_offset < len(string1) и string2_offset >= len(string2).

Пример

SELECT
    stringCompare('alice', 'bob', 0, 0, 3) AS result1,
    stringCompare('alice', 'alicia', 0, 0, 3) AS result2,
    stringCompare('bob', 'alice', 0, 0, 3) AS result3

Результат:

   ┌─result1─┬─result2─┬─result3─┐
1. │      -1 │       0 │       1 │
   └─────────┴─────────┴─────────┘
SELECT
    stringCompare('alice', 'alicia') AS result2,
    stringCompare('alice', 'alice') AS result1,
    stringCompare('bob', 'alice') AS result3

Результат:

   ┌─result2─┬─result1─┬─result3─┐
1. │      -1 │       0 │       1 │
   └─────────┴─────────┴─────────┘

sparseGrams

Находит все подстроки заданной строки, длина которых составляет не менее n, где хеши (n-1)-грамм на границах подстроки строго больше, чем у любой (n-1)-граммы внутри подстроки. Использует crc32 в качестве хеш-функции.

Синтаксис

sparseGrams(s[, min_ngram_length]);

Аргументы

  • s — Входная строка. String
  • min_ngram_length — Минимальная длина извлекаемой ngram. Значение по умолчанию и минимальное равно 3.
  • max_ngram_length — Максимальная длина извлекаемой ngram. Значение по умолчанию равно 100. Должно быть не менее 'min_ngram_length'.

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

  • Массив выбранных подстрок. Array(String).

Пример

SELECT sparseGrams('alice', 3) AS result

Результат:

   ┌─result─────────────────────┐
1. │ ['ali','lic','lice','ice'] │
   └────────────────────────────┘

sparseGramsUTF8

Находит все подстроки заданной строки, длина которых составляет не менее n, где хеши (n-1)-грамм на границах подстроки строго больше, чем у любой (n-1)-граммы внутри подстроки. Использует crc32 в качестве хеш-функции. Ожидает строку в кодировке UTF-8, выбрасывает исключение в случае недопустимой последовательности UTF-8.

Синтаксис

sparseGramsUTF8(s[, min_ngram_length]);

Аргументы

  • s — Входная строка. String
  • min_ngram_length — Минимальная длина извлекаемой ngram. Значение по умолчанию и минимальное равно 3.
  • max_ngram_length — Максимальная длина извлекаемой ngram. Значение по умолчанию равно 100. Должно быть не менее 'min_ngram_length'.

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

  • Массив выбранных подстрок. Array(String).

Пример

SELECT sparseGramsUTF8('алиса', 3) AS result

Результат:

   ┌─result──────────────┐
1. │ ['али','лис','иса'] │
   └─────────────────────┘

sparseGramsHashes

Находит хеши всех подстрок заданной строки, длина которых составляет не менее n, где хеши (n-1)-грамм на границах подстроки строго больше, чем у любой (n-1)-граммы внутри подстроки. Использует crc32 в качестве хеш-функции.

Синтаксис

sparseGramsHashes(s[, min_ngram_length]);

Аргументы

  • s — Входная строка. String
  • min_ngram_length — Минимальная длина извлекаемой ngram. Значение по умолчанию и минимальное равно 3.
  • max_ngram_length — Максимальная длина извлекаемой ngram. Значение по умолчанию равно 100. Должно быть не менее 'min_ngram_length'.

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

  • Массив выбранных подстрок crc32-хешей. Array(UInt32).

Пример

SELECT sparseGramsHashes('alice', 3) AS result

Результат:

   ┌─result────────────────────────────────────────┐
1. │ [1265796434,3725069146,1689963195,3410985998] │
   └───────────────────────────────────────────────┘

sparseGramsHashesUTF8

Находит хеши всех подстрок заданной строки, длина которых составляет не менее n, где хеши (n-1)-грамм на границах подстроки строго больше, чем у любой (n-1)-граммы внутри подстроки. Использует crc32 в качестве хеш-функции. Ожидает строку в кодировке UTF-8, выбрасывает исключение в случае недопустимой последовательности UTF-8.

Синтаксис

sparseGramsUTF8(s[, min_ngram_length]);

Аргументы

  • s — Входная строка. String
  • min_ngram_length — Минимальная длина извлекаемой ngram. Значение по умолчанию и минимальное равно 3.
  • max_ngram_length — Максимальная длина извлекаемой ngram. Значение по умолчанию равно 100. Должно быть не менее 'min_ngram_length'.

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

  • Массив выбранных подстрок crc32-хешей. Array(UInt32).

Пример

SELECT sparseGramsHashesUTF8('алиса', 3) AS result

Результат:

   ┌─result───────────────────────────┐
1. │ [417784657,728683856,3071092609] │
   └──────────────────────────────────┘

stringBytesUniq

Считает количество различных байтов в строке.

Синтаксис

stringBytesUniq(s)

Аргументы

  • s — Строка для анализа. String.

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

  • Количество различных байтов в строке. UInt16.

Пример

SELECT stringBytesUniq('Hello');

Результат:

┌─stringBytesUniq('Hello')─┐
│                        4 │
└──────────────────────────┘

stringBytesEntropy

Вычисляет энтропию Шеннона распределения байтов в строке.

Синтаксис

stringBytesEntropy(s)

Аргументы

  • s — Строка для анализа. String.

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

  • Энтропия Шеннона распределения байтов в строке. Float64.

Пример

SELECT stringBytesEntropy('Hello, world!');

Результат:

┌─stringBytesEntropy('Hello, world!')─┐
│                         3.07049960  │
└─────────────────────────────────────┘