15 KiB
Функции для работы со строками
empty
Возвращает 1 для пустой строки, и 0 для непустой строки. Тип результата - UInt8. Строка считается непустой, если содержит хотя бы один байт, пусть даже это пробел или нулевой байт. Функция также работает для массивов.
notEmpty
Возвращает 0 для пустой строки, и 1 для непустой строки. Тип результата - UInt8. Функция также работает для массивов.
length
Возвращает длину строки в байтах (не символах, не кодовых точках). Тип результата - UInt64. Функция также работает для массивов.
lengthUTF8
Возвращает длину строки в кодовых точках Unicode (не символах), при допущении, что строка содержит набор байт, являющийся текстом в кодировке UTF-8. Если допущение не выполнено - то возвращает какой-нибудь результат (не кидает исключение). Тип результата - UInt64.
lower
Переводит ASCII-символы латиницы в строке в нижний регистр.
upper
Переводит ASCII-символы латиницы в строке в верхний регистр.
lowerUTF8
Переводит строку в нижний регистр, при допущении, что строка содержит набор байт, представляющий текст в кодировке UTF-8. Не учитывает язык. То есть, для турецкого языка, результат может быть не совсем верным. Если длина UTF-8 последовательности байт различна для верхнего и нижнего регистра кодовой точки, то для этой кодовой точки, результат работы может быть некорректным. Если строка содержит набор байт, не являющийся UTF-8, то поведение не определено.
upperUTF8
Переводит строку в верхний регистр, при допущении, что строка содержит набор байт, представляющий текст в кодировке UTF-8. Не учитывает язык. То есть, для турецкого языка, результат может быть не совсем верным. Если длина UTF-8 последовательности байт различна для верхнего и нижнего регистра кодовой точки, то для этой кодовой точки, результат работы может быть некорректным. Если строка содержит набор байт, не являющийся UTF-8, то поведение не определено.
isValidUTF8
Возвращает 1, если набор байт является корректным в кодировке UTF-8, 0 иначе.
toValidUTF8
Заменяет некорректные символы UTF-8 на символ <EFBFBD>
(U+FFFD). Все идущие подряд некорректные символы схлопываются в один заменяющий символ.
toValidUTF8( input_string )
Параметры:
- input_string — произвольный набор байтов, представленный как объект типа String.
Возвращаемое значение: Корректная строка UTF-8.
Пример
SELECT toValidUTF8('\x61\xF0\x80\x80\x80b')
┌─toValidUTF8('a<><61><EFBFBD><EFBFBD>b')─┐
│ a<>b │
└───────────────────────┘
repeat
Повторяет строку определенное количество раз и объединяет повторяемые значения в одну строку.
Синтаксис
repeat(s, n)
Параметры
Возвращаемое значение
Строка, состоящая из повторений n
раз исходной строки s
. Если n
< 1, то функция вернет пустую строку.
Тип: String
.
Пример
Запрос:
SELECT repeat('abc', 10)
Ответ:
┌─repeat('abc', 10)──────────────┐
│ abcabcabcabcabcabcabcabcabcabc │
└────────────────────────────────┘
reverse
Разворачивает строку (как последовательность байт).
reverseUTF8
Разворачивает последовательность кодовых точек Unicode, при допущении, что строка содержит набор байт, представляющий текст в кодировке UTF-8. Иначе - что-то делает (не кидает исключение).
format(pattern, s0, s1, ...)
Форматирует константный шаблон со строками, перечисленными в аргументах. pattern
-- упрощенная версия шаблона в языке Python. Шаблон содержит "заменяющие поля", которые окружены фигурными скобками {}
. Всё, что не содержится в скобках, интерпретируется как обычный текст и просто копируется. Если нужно использовать символ фигурной скобки, можно экранировать двойной скобкой {{
или }}
. Имя полей могут быть числами (нумерация с нуля) или пустыми (тогда они интерпретируются как последовательные числа).
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 │
└───────────────────────────────────┘
concat(s1, s2, ...)
Склеивает строки, перечисленные в аргументах, без разделителей.
substring(s, offset, length)
Возвращает подстроку, начиная с байта по индексу offset, длины length байт. Индексация символов - начиная с единицы (как в стандартном SQL). Аргументы offset и length должны быть константами.
substringUTF8(s, offset, length)
Так же, как substring, но для кодовых точек Unicode. Работает при допущении, что строка содержит набор байт, представляющий текст в кодировке UTF-8. Если допущение не выполнено - то возвращает какой-нибудь результат (не кидает исключение).
appendTrailingCharIfAbsent(s, c)
Если строка s непустая и не содержит символ c на конце, то добавляет символ c в конец.
convertCharset(s, from, to)
Возвращает сконвертированную из кодировки from в кодировку to строку s.
base64Encode(s)
Производит кодирование строки s в base64-представление.
base64Decode(s)
Декодирует base64-представление s в исходную строку. При невозможности декодирования выбрасывает исключение
tryBase64Decode(s)
Функционал аналогичен base64Decode, но при невозможности декодирования возвращает пустую строку.
endsWith(s, suffix)
Возвращает 1, если строка завершается указанным суффиксом, и 0 в противном случае.
startsWith(str, prefix)
Возвращает 1, если строка начинается указанным префиксом, в противном случае 0.
SELECT startsWith('Spider-Man', 'Spi');
Возвращаемые значения
- 1, если строка начинается указанным префиксом.
- 0, если строка не начинается указанным префиксом.
Пример
Запрос:
SELECT startsWith('Hello, world!', 'He');
Ответ:
┌─startsWith('Hello, world!', 'He')─┐
│ 1 │
└───────────────────────────────────┘
trim
Удаляет все указанные символы с начала или окончания строки. По умолчанию удаляет все последовательные вхождения обычных пробелов (32 символ ASCII) с обоих концов строки.
Синтаксис
trim([[LEADING|TRAILING|BOTH] trim_character FROM] input_string)
Параметры
trim_character
— один или несколько символов, подлежащие удалению. String.input_string
— строка для обрезки. String.
Возвращаемое значение
Исходную строку после обрезки с левого и (или) правого концов строки.
Тип: String
.
Пример
Запрос:
SELECT trim(BOTH ' ()' FROM '( Hello, world! )')
Ответ:
┌─trim(BOTH ' ()' FROM '( Hello, world! )')─┐
│ Hello, world! │
└───────────────────────────────────────────────┘
trimLeft
Удаляет все последовательные вхождения обычных пробелов (32 символ ASCII) с левого конца строки. Не удаляет другие виды пробелов (табуляция, пробел без разрыва и т. д.).
Синтаксис
trimLeft(input_string)
Алиас: ltrim(input_string)
.
Параметры
input_string
— строка для обрезки. String.
Возвращаемое значение
Исходную строку без общих пробельных символов слева.
Тип: String
.
Пример
Запрос:
SELECT trimLeft(' Hello, world! ')
Ответ:
┌─trimLeft(' Hello, world! ')─┐
│ Hello, world! │
└─────────────────────────────────────┘
trimRight
Удаляет все последовательные вхождения обычных пробелов (32 символ ASCII) с правого конца строки. Не удаляет другие виды пробелов (табуляция, пробел без разрыва и т. д.).
Синтаксис
trimRight(input_string)
Алиас: rtrim(input_string)
.
Параметры
input_string
— строка для обрезки. String.
Возвращаемое значение
Исходную строку без общих пробельных символов справа.
Тип: String
.
Пример
Запрос:
SELECT trimRight(' Hello, world! ')
Ответ:
┌─trimRight(' Hello, world! ')─┐
│ Hello, world! │
└──────────────────────────────────────┘
trimBoth
Удаляет все последовательные вхождения обычных пробелов (32 символ ASCII) с обоих концов строки. Не удаляет другие виды пробелов (табуляция, пробел без разрыва и т. д.).
Синтаксис
trimBoth(input_string)
Алиас: trim(input_string)
.
Параметры
input_string
— строка для обрезки. String.
Возвращаемое значение
Исходную строку без общих пробельных символов с обоих концов строки.
Тип: String
.
Пример
Запрос:
SELECT trimBoth(' Hello, world! ')
Ответ:
┌─trimBoth(' Hello, world! ')─┐
│ Hello, world! │
└─────────────────────────────────────┘
CRC32(s)
Возвращает чексумму CRC32 данной строки, используется CRC-32-IEEE 802.3 многочлен и начальным значением 0xffffffff
(т.к. используется реализация из zlib).
Тип результата - UInt32.
CRC32IEEE(s)
Возвращает чексумму CRC32 данной строки, используется CRC-32-IEEE 802.3 многочлен.
Тип результата - UInt32.
CRC64(s)
Возвращает чексумму CRC64 данной строки, используется CRC-64-ECMA многочлен.
Тип результата - UInt64.