6.1 KiB
Функции кодирования
char
Возвращает строку, длина которой равна числу переданных аргументов, и каждый байт имеет значение соответствующего аргумента. Принимает несколько числовых аргументов. Если значение аргумента выходит за диапазон UInt8 (0..255), то оно преобразуется в UInt8 с возможным округлением и переполнением.
Синтаксис
char(number_1, [number_2, ..., number_n]);
Параметры
number_1, number_2, ..., number_n
— Числовые аргументы, которые интерпретируются как целые числа. Типы: Int, Float.
Возвращаемое значение
- строка из соответствующих байт.
Тип: String
.
Пример
Запрос:
SELECT char(104.1, 101, 108.9, 108.9, 111) AS hello
Ответ:
┌─hello─┐
│ hello │
└───────┘
Вы можете создать строку в произвольной кодировке, передав соответствующие байты. Пример для UTF-8:
Запрос:
SELECT char(0xD0, 0xBF, 0xD1, 0x80, 0xD0, 0xB8, 0xD0, 0xB2, 0xD0, 0xB5, 0xD1, 0x82) AS hello;
Ответ:
┌─hello──┐
│ привет │
└────────┘
Запрос:
SELECT char(0xE4, 0xBD, 0xA0, 0xE5, 0xA5, 0xBD) AS hello;
Ответ:
┌─hello─┐
│ 你好 │
└───────┘
hex
Возвращает строку, содержащую шестнадцатеричное представление аргумента.
Syntax
hex(arg)
Результат зависит от типа передаваемого аргумента. Используйте заглавные буквы A-F
. Не используйте префиксы 0x
и суффиксы h
.
Для строк просто все байты кодируются в виде двух шестнадцатеричных цифр.
Числа преобразуются в человекочитаемый (big endian) формат. Для чисел вырезаются старшие нули, но только по целым байтам.
Например:
Date
кодируется как число дней с начала Unix-эпохи.DateTime
кодируются как число секунд с начала Unix-эпохи.Float
иDecimal
кодируются как их шестнадцатеричное представление в памяти.
Параметры
arg
— Значение для преобразования в шестнадцатеричное. Типы: String, UInt, Float, Decimal, Date or DateTime.
Влзвращаемое значение
- Строковое шестнадцатеричное представление переданного аргумента.
Тип: String
.
Пример
Запрос:
SELECT hex(toFloat32(number)) as hex_presentation FROM numbers(15, 2);
Ответ:
┌─hex_presentation─┐
│ 00007041 │
│ 00008041 │
└──────────────────┘
Запрос:
SELECT hex(toFloat64(number)) as hex_presentation FROM numbers(15, 2);
Ответ:
┌─hex_presentation─┐
│ 0000000000002E40 │
│ 0000000000003040 │
└──────────────────┘
unhex(str)
Принимает строку, содержащую произвольное количество шестнадцатеричных цифр, и возвращает строку, содержащую соответствующие байты. Поддерживаются как строчные, так и заглавные буквы A-F. Число шестнадцатеричных цифр не обязано быть чётным. Если оно нечётное - последняя цифра интерпретируется как младшая половинка байта 00-0F. Если строка-аргумент содержит что-либо кроме шестнадцатеричных цифр, то будет возвращён какой-либо implementation-defined результат (не кидается исключение). Если вы хотите преобразовать результат в число, то вы можете использовать функции reverse и reinterpretAsType.
UUIDStringToNum(str)
Принимает строку, содержащую 36 символов в формате 123e4567-e89b-12d3-a456-426655440000
, и возвращает в виде набора байт в FixedString(16).
UUIDNumToString(str)
Принимает значение типа FixedString(16). Возвращает строку из 36 символов в текстовом виде.
bitmaskToList(num)
Принимает целое число. Возвращает строку, содержащую список степеней двойки, в сумме дающих исходное число; по возрастанию, в текстовом виде, через запятую, без пробелов.
bitmaskToArray(num)
Принимает целое число. Возвращает массив чисел типа UInt64, содержащий степени двойки, в сумме дающих исходное число; числа в массиве идут по возрастанию.