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

Функции кодирования

bech32Decode

Появилась в версии: v25.6

Декодирует строку адреса Bech32, сгенерированную с использованием алгоритмов bech32 или bech32m.

Примечание

В отличие от функции кодирования, Bech32Decode автоматически обрабатывает дополненные значения типа FixedString.

Синтаксис

bech32Decode(address)

Аргументы

  • address — строка в кодировке Bech32 для декодирования. String или FixedString

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

Возвращает кортеж (hrp, data), использованных при кодировании строки. Данные представлены в двоичном формате. Tuple(String, String)

Примеры

Декодирование адреса

SELECT tup.1 AS hrp, hex(tup.2) AS data FROM (SELECT bech32Decode('bc1w508d6qejxtdg4y5r3zarvary0c5xw7kj7gz7z') AS tup)
bc   751E76E8199196D454941C45D1B3A323F1433BD6

Адрес тестовой сети

SELECT tup.1 AS hrp, hex(tup.2) AS data FROM (SELECT bech32Decode('tb1w508d6qejxtdg4y5r3zarvary0c5xw7kzp034v') AS tup)
tb   751E76E8199196D454941C45D1B3A323F1433BD6

bech32Encode

Добавлена в: v25.6

Кодирует бинарную строку данных вместе с человеко-читаемой частью (HRP), используя алгоритмы Bech32 или Bech32m.

Примечание

При использовании типа данных FixedString, если значение не полностью заполняет строку, оно дополняется нулевыми символами. Функция bech32Encode обрабатывает это автоматически для аргумента hrp, но для аргумента data значения не должны быть дополнены. По этой причине не рекомендуется использовать тип данных FixedString для ваших данных, если только вы не уверены, что все значения имеют одинаковую длину, и не обеспечите, что столбец FixedString также имеет эту длину.

Синтаксис

bech32Encode(hrp, data[, witver])

Аргументы

  • hrp — Строка из 1 - 83 символов в нижнем регистре, задающая "human-readable part" (читаемую человеком часть) кода. Обычно 'bc' или 'tb'. String или FixedString
  • data — Строка двоичных данных для кодирования. String или FixedString
  • witver — Необязательный параметр. Версия witness (по умолчанию = 1). UInt*, задающий версию алгоритма. 0 для Bech32 и 1 или больше для Bech32m. UInt*

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

Возвращает строку адреса Bech32, состоящую из human-readable части, разделительного символа, который всегда равен '1', и части данных. Длина строки никогда не превышает 90 символов. Если алгоритм не может сгенерировать корректный адрес из входных данных, возвращается пустая строка. String

Примеры

Bech32m по умолчанию

-- Если версия witness не указана, по умолчанию используется версия 1 — обновлённый алгоритм Bech32m.
SELECT bech32Encode('bc', unhex('751e76e8199196d454941c45d1b3a323f1433bd6'))
bc1w508d6qejxtdg4y5r3zarvary0c5xw7k8zcwmq

Алгоритм Bech32

-- Версия witness со значением 0 приведёт к другой строке адреса.
SELECT bech32Encode('bc', unhex('751e76e8199196d454941c45d1b3a323f1433bd6'), 0)
bc1w508d6qejxtdg4y5r3zarvary0c5xw7kj7gz7z

Пользовательский HRP

-- Хотя 'bc' (Mainnet) и 'tb' (Testnet) являются единственными допустимыми значениями hrp для
-- формата адресов SegWit, Bech32 допускает любое значение hrp, удовлетворяющее указанным выше требованиям.
SELECT bech32Encode('abcdefg', unhex('751e76e8199196d454941c45d1b3a323f1433bd6'), 10)
abcdefg1w508d6qejxtdg4y5r3zarvary0c5xw7k9rp8r4

bin

Введена в: v21.8

Возвращает строку, содержащую двоичное представление аргумента в соответствии со следующей логикой для разных типов:

TypeDescription
(U)Int*Выводит двоичные разряды от старшего к младшему (порядок big-endian или «читаемый человеком»). Начинает с первого (самого старшего) ненулевого байта (ведущие нулевые байты опускаются), но всегда выводит восемь разрядов для каждого байта, если старший разряд равен нулю.
Date and DateTimeФорматируются как соответствующие целые числа (количество дней с начала эпохи Unix для Date и значение UNIX timestamp для DateTime).
String and FixedStringВсе байты просто кодируются как восемь двоичных разрядов. Нулевые байты не опускаются.
Float* and DecimalКодируются в соответствии с их представлением в памяти. Так как поддерживается архитектура little-endian, они кодируются в формате little-endian. Ведущие и замыкающие нулевые байты не опускаются.
UUIDКодируется как строка в порядке big-endian.

Синтаксис

bin(arg)

Аргументы

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

Возвращает строку, содержащую двоичное представление аргумента. String

Примеры

Простое целое число

SELECT bin(14)
┌─bin(14)──┐
│ 00001110 │
└──────────┘

Числа типа Float32

SELECT bin(toFloat32(number)) AS bin_presentation FROM numbers(15, 2)
┌─bin_presentation─────────────────┐
│ 00000000000000000111000001000001 │
│ 00000000000000001000000001000001 │
└──────────────────────────────────┘

Числа с плавающей запятой Float64

SELECT bin(toFloat64(number)) AS bin_presentation FROM numbers(15, 2)
┌─bin_presentation─────────────────────────────────────────────────┐
│ 0000000000000000000000000000000000000000000000000010111001000000 │
│ 0000000000000000000000000000000000000000000000000011000001000000 │
└──────────────────────────────────────────────────────────────────┘

Конвертация UUID

SELECT bin(toUUID('61f0c404-5cb3-11e7-907b-a6006ad3dba0')) AS bin_uuid
┌─bin_uuid─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ 01100001111100001100010000000100010111001011001100010001111001111001000001111011101001100000000001101010110100111101101110100000 │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

bitPositionsToArray

Введена в версии: v21.7

Эта функция возвращает позиции (в порядке возрастания) битов со значением 1 в двоичном представлении беззнакового целого числа. Знаковые целые числа во входных данных сначала приводятся к беззнаковому целому числу.

Синтаксис

bitPositionsToArray(arg)

Аргументы

  • arg — целое число. (U)Int*

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

Возвращает массив с позициями единичных битов в двоичном представлении входного значения, упорядоченными по возрастанию. Array(UInt64)

Примеры

Установлен один бит

SELECT bitPositionsToArray(toInt8(1)) AS bit_positions
┌─bit_positions─┐
│ [0]           │
└───────────────┘

Все биты установлены

SELECT bitPositionsToArray(toInt8(-1)) AS bit_positions
┌─bit_positions─────────────┐
│ [0, 1, 2, 3, 4, 5, 6, 7]  │
└───────────────────────────┘

bitmaskToArray

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

Эта функция разлагает целое число на сумму степеней двойки. Степени двойки возвращаются в виде массива, отсортированного по возрастанию.

Синтаксис

bitmaskToArray(num)

Аргументы

  • num — целое число. (U)Int*

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

Возвращает массив степеней двойки, отсортированных по возрастанию, которые в сумме дают исходное число. Array(UInt64)

Примеры

Базовый пример

SELECT bitmaskToArray(50) AS powers_of_two
┌─powers_of_two───┐
│ [2, 16, 32]     │
└─────────────────┘

Степень двойки

SELECT bitmaskToArray(8) AS powers_of_two
┌─powers_of_two─┐
│ [8]           │
└───────────────┘

bitmaskToList

Появилась в версии: v1.1

Аналогична bitmaskToArray, но возвращает степени двойки в виде строки со значениями, разделёнными запятыми.

Синтаксис

bitmaskToList(num)

Аргументы

  • num — целое число. (U)Int*

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

Возвращает строку, содержащую степени двойки, разделённые запятыми. String

Примеры

Базовый пример

SELECT bitmaskToList(50) AS powers_list
┌─powers_list───┐
│ 2, 16, 32     │
└───────────────┘

char

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

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

Если значение аргумента выходит за пределы диапазона типа данных UInt8, то оно приводится к UInt8 с возможным округлением и переполнением.

Синтаксис

char(num1[, num2[, ...]])

Аргументы

  • num1[, num2[, num3 ...]] — числовые аргументы, интерпретируемые как целые числа. (U)Int8/16/32/64 или Float*

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

Возвращает строку из указанных байтов. String

Примеры

Базовый пример

SELECT char(104.1, 101, 108.9, 108.9, 111) AS hello;
┌─hello─┐
│ hello │
└───────┘

Создание произвольных кодировок

-- Можно создать строку с произвольной кодировкой, передав соответствующие байты.
-- например, UTF8
SELECT char(0xD0, 0xBF, 0xD1, 0x80, 0xD0, 0xB8, 0xD0, 0xB2, 0xD0, 0xB5, 0xD1, 0x82) AS hello;
┌─hello──┐
│ привет │
└────────┘

hex

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

Возвращает строку, содержащую шестнадцатеричное представление аргумента в соответствии со следующей логикой для разных типов:

ТипОписание
(U)Int*Выводит шестнадцатеричные цифры («полубайты», nibbles) от старшего к младшему разряду (порядок big-endian или «читаемый человеком» порядок). Начинает со старшего ненулевого байта (ведущие нулевые байты опускаются), но всегда выводит обе цифры каждого байта, даже если старшая цифра равна нулю.
Date и DateTimeФорматируются как соответствующие целые числа (количество дней, прошедших с начала эпохи, для Date и значение метки времени Unix для DateTime).
String и FixedStringВсе байты просто кодируются как две шестнадцатеричные цифры. Нулевые байты не опускаются.
Float* и DecimalКодируются в виде их представления в памяти. ClickHouse хранит значения во внутреннем представлении всегда в формате little-endian, поэтому они кодируются именно так. Ведущие и завершающие нулевые байты не опускаются.
UUIDКодируется как строка в порядке big-endian.

Функция использует заглавные буквы A-F и не использует никаких префиксов (например, 0x) или суффиксов (например, h).

Синтаксис

hex(arg)

Аргументы

  • arg — значение, которое нужно преобразовать в шестнадцатеричное представление. String или (U)Int* или Float* или Decimal или Date или DateTime

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

Возвращает строку с шестнадцатеричным представлением аргумента. String

Примеры

Простое целое число

SELECT hex(1)
01

Числа типа Float32

SELECT hex(toFloat32(number)) AS hex_presentation FROM numbers(15, 2)
┌─hex_presentation─┐
│ 00007041         │
│ 00008041         │
└──────────────────┘

Числа типа Float64

SELECT hex(toFloat64(number)) AS hex_presentation FROM numbers(15, 2)
┌─hex_presentation─┐
│ 0000000000002E40 │
│ 0000000000003040 │
└──────────────────┘

Преобразование UUID

SELECT lower(hex(toUUID('61f0c404-5cb3-11e7-907b-a6006ad3dba0'))) AS uuid_hex
┌─uuid_hex─────────────────────────┐
│ 61f0c4045cb311e7907ba6006ad3dba0 │
└──────────────────────────────────┘

hilbertDecode

Введена в: v24.6

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

Как и функция hilbertEncode, эта функция имеет два режима работы:

  • Простой
  • Расширенный

Простой режим

Принимает до двух беззнаковых целых чисел в качестве аргументов и возвращает код типа UInt64.

Расширенный режим

Принимает маску диапазона (кортеж) в качестве первого аргумента и до двух беззнаковых целых чисел в качестве остальных аргументов. Каждое число в маске задаёт количество бит, на которое соответствующий аргумент будет сдвинут влево, фактически масштабируя аргумент внутри его диапазона.

Расширение диапазона может быть полезно, когда требуется получить схожее распределение для аргументов с сильно различающимися диапазонами (или кардинальностями). Например: «IP-адрес» (0...FFFFFFFF) и «код страны» (0...FF). Как и при кодировании, количество чисел ограничено максимум 8.

Синтаксис

hilbertDecode(tuple_size, code)

Аргументы

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

Возвращает кортеж указанного размера. Tuple(UInt64)

Примеры

Простой режим

SELECT hilbertDecode(2, 31)
["3", "4"]

Один аргумент

-- Код Гильберта для одного аргумента всегда совпадает с самим аргументом (в виде кортежа).
SELECT hilbertDecode(1, 1)
["1"]

Расширенный режим

-- Единственный аргумент с кортежем, задающим битовые сдвиги, будет соответственно сдвинут вправо.
SELECT hilbertDecode(tuple(2), 32768)
["128"]

Использование столбцов

-- Сначала создайте таблицу и вставьте некоторые данные
CREATE TABLE hilbert_numbers(
    n1 UInt32,
    n2 UInt32
)
ENGINE=MergeTree()
ORDER BY n1 SETTINGS index_granularity = 8192, index_granularity_bytes = '10Mi';
insert into hilbert_numbers (*) values(1,2);

-- Используйте имена столбцов вместо констант в качестве аргументов функций
SELECT untuple(hilbertDecode(2, hilbertEncode(n1, n2))) FROM hilbert_numbers;
1    2

hilbertEncode

Добавлена в версии: v24.6

Вычисляет код кривой Гильберта для списка беззнаковых целых чисел.

Функция имеет два режима работы:

  • Простой
  • Расширенный

Простой режим

Принимает до двух беззнаковых целых чисел в качестве аргументов и возвращает код типа UInt64.

Расширенный режим

Принимает маску диапазона (Tuple) в качестве первого аргумента и до двух беззнаковых целых чисел в качестве остальных аргументов.

Каждое число в маске задаёт количество бит, на которое соответствующий аргумент будет сдвинут влево, эффективно масштабируя аргумент внутри его диапазона.

Синтаксис

-- Упрощённый режим
hilbertEncode(args)

-- Расширенный режим
hilbertEncode(range_mask, args)

Аргументы

  • args — До двух значений типа UInt или столбцов типа UInt. UInt8/16/32/64
  • range_mask — Для расширенного режима — до двух значений типа UInt или столбцов типа UInt. UInt8/16/32/64

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

Возвращает код типа UInt64. UInt64

Примеры

Простой режим

SELECT hilbertEncode(3, 4)
31

Расширенный режим

-- Расширение диапазона может быть полезно, когда требуется схожее распределение для
-- аргументов с сильно различающимися диапазонами (или мощностью).
-- Например: 'IP-адрес' (0...FFFFFFFF) и 'Код страны' (0...FF).
-- Примечание: размер кортежа должен соответствовать количеству остальных аргументов.
SELECT hilbertEncode((10, 6), 1024, 16)
4031541586602

Один аргумент

-- Для одного аргумента без кортежа функция возвращает сам аргумент
-- в качестве индекса Гильберта, так как отображение размерностей не требуется.
SELECT hilbertEncode(1)
1

Расширенная форма с одним аргументом

-- Если передан один аргумент с кортежем, задающим битовые сдвиги, функция
-- выполняет сдвиг аргумента влево на указанное количество битов.
SELECT hilbertEncode(tuple(2), 128)
512

Использование столбцов

-- Сначала создайте таблицу и вставьте некоторые данные
CREATE TABLE hilbert_numbers(
    n1 UInt32,
    n2 UInt32
)
ENGINE=MergeTree()
ORDER BY n1;
insert into hilbert_numbers (*) values(1, 2);

-- Используйте имена столбцов вместо констант в качестве аргументов функции
SELECT hilbertEncode(n1, n2) FROM hilbert_numbers;
13

mortonDecode

Введена в: v24.6

Декодирует кодировку Morton (ZCurve) в соответствующий кортеж беззнаковых целых чисел.

Как и функция mortonEncode, эта функция имеет два режима работы:

  • Простой
  • Расширенный

Простой режим

Принимает размер результирующего кортежа в качестве первого аргумента и код — в качестве второго аргумента.

Расширенный режим

Принимает маску диапазона (кортеж) в качестве первого аргумента и код — в качестве второго аргумента. Каждое число в маске задаёт степень сжатия диапазона:

  • 1 — без сжатия
  • 2 — сжатие в 2 раза
  • 3 — сжатие в 3 раза ⋮
  • До 8-кратного сжатия.

Расширение диапазона может быть полезно, когда требуется схожее распределение для аргументов с сильно различающимися диапазонами (или кардинальностью). Например: 'IP Address' (0...FFFFFFFF) и 'Country code' (0...FF). Как и для функции кодирования, это ограничено не более чем 8 числами.

Синтаксис

-- Простой режим
mortonDecode(tuple_size, code)

-- Расширенный режим
mortonDecode(range_mask, code)

Аргументы

  • tuple_size — целое число не более 8. UInt8/16/32/64
  • range_mask — в расширенном режиме маска для каждого аргумента. Маска — это кортеж беззнаковых целых чисел. Каждое число в маске задаёт степень уменьшения диапазона. Tuple(UInt8/16/32/64)
  • code — код UInt64. UInt64

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

Возвращает кортеж заданного размера. Tuple(UInt64)

Примеры

Простой режим

SELECT mortonDecode(3, 53)
["1", "2", "3"]

Единственный аргумент

SELECT mortonDecode(1, 1)
["1"]

Расширенный режим, сокращение одного аргумента

SELECT mortonDecode(tuple(2), 32768)
["128"]

Использование столбцов

-- Сначала создадим таблицу и вставим данные
CREATE TABLE morton_numbers(
    n1 UInt32,
    n2 UInt32,
    n3 UInt16,
    n4 UInt16,
    n5 UInt8,
    n6 UInt8,
    n7 UInt8,
    n8 UInt8
)
ENGINE=MergeTree()
ORDER BY n1;
INSERT INTO morton_numbers (*) values(1, 2, 3, 4, 5, 6, 7, 8);

-- Используем имена столбцов вместо констант в качестве аргументов функции
SELECT untuple(mortonDecode(8, mortonEncode(n1, n2, n3, n4, n5, n6, n7, n8))) FROM morton_numbers;
1 2 3 4 5 6 7 8

mortonEncode

Впервые появилась в: v24.6

Вычисляет кодирование Мортон (Z-curve) для списка беззнаковых целых чисел.

Функция работает в двух режимах:

  • Простой
  • Расширенный*

Простой режим

Принимает до 8 беззнаковых целых чисел в качестве аргументов и возвращает значение типа UInt64.

Расширенный режим

Принимает маску диапазона (Tuple) в качестве первого аргумента и до 8 беззнаковых целых чисел в качестве остальных аргументов.

Каждое число в маске задаёт степень расширения диапазона:

  • 1 — без расширения
  • 2 — расширение в 2 раза
  • 3 — расширение в 3 раза ⋮
  • До 8-кратного расширения.

Синтаксис

-- Упрощённый режим
mortonEncode(args)

-- Расширенный режим
mortonEncode(range_mask, args)

Аргументы

  • args — до 8 беззнаковых целых чисел или столбцов указанного выше типа. UInt8/16/32/64
  • range_mask — для расширенного режима — маска для каждого аргумента. Маска — это кортеж беззнаковых целых чисел от 1 до 8. Каждое число в маске задаёт величину сжатия диапазона. Tuple(UInt8/16/32/64)

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

Возвращает код типа UInt64. UInt64

Примеры

Простой режим

SELECT mortonEncode(1, 2, 3)
53

Расширенный режим

-- Расширение диапазона может быть полезно, когда требуется схожее распределение для
-- аргументов с сильно различающимися диапазонами (или мощностью)
-- Например: 'IP-адрес' (0...FFFFFFFF) и 'Код страны' (0...FF).
-- Примечание: размер кортежа должен быть равен количеству других аргументов.
SELECT mortonEncode((1,2), 1024, 16)
1572864

Один аргумент

-- Кодирование Мортона для одного аргумента всегда возвращает сам аргумент
SELECT mortonEncode(1)
1

Развёрнутый одиночный аргумент

SELECT mortonEncode(tuple(2), 128)
32768

Использование столбцов

-- Сначала создадим таблицу и вставим данные
CREATE TABLE morton_numbers(
    n1 UInt32,
    n2 UInt32,
    n3 UInt16,
    n4 UInt16,
    n5 UInt8,
    n6 UInt8,
    n7 UInt8,
    n8 UInt8
)
ENGINE=MergeTree()
ORDER BY n1;
INSERT INTO morton_numbers (*) values(1, 2, 3, 4, 5, 6, 7, 8);

-- Используем имена столбцов вместо констант в качестве аргументов функции
SELECT mortonEncode(n1, n2, n3, n4, n5, n6, n7, n8) FROM morton_numbers;
2155374165

sqidDecode

Добавлена в версии v24.1

Преобразует sqid обратно в массив чисел.

Синтаксис

sqidDecode(sqid)

Аргументы

  • sqid — значение sqid, которое нужно декодировать. String

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

Возвращает массив чисел, полученных из sqid. Array(UInt64)

Примеры

Пример использования

SELECT sqidDecode('gXHfJ1C6dN');
┌─sqidDecode('gXHfJ1C6dN')─────┐
│ [1, 2, 3, 4, 5]              │
└──────────────────────────────┘

sqidEncode

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

Преобразует числа в sqid — строковый идентификатор в стиле YouTube.

Синтаксис

sqidEncode(n1[, n2, ...])

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

Аргументы

  • n1[, n2, ...] — Произвольное количество чисел. UInt8/16/32/64

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

Возвращает хеш-идентификатор String

Примеры

Пример использования

SELECT sqidEncode(1, 2, 3, 4, 5);
┌─sqidEncode(1, 2, 3, 4, 5)─┐
│ gXHfJ1C6dN                │
└───────────────────────────┘

unbin

Введена в: v21.8

Интерпретирует каждую пару двоичных разрядов (в аргументе) как число и преобразует её в байт, представленный этим числом. Функция выполняет операцию, противоположную bin.

Для числового аргумента unbin() не возвращает значение, обратное bin(). Если вы хотите преобразовать результат в число, вы можете использовать функции reverse и reinterpretAs<Type>.

Примечание

Если unbin вызывается из clickhouse-client, двоичные строки отображаются в кодировке UTF-8.

Поддерживает двоичные цифры 0 и 1. Количество двоичных разрядов не обязано быть кратным восьми. Если строка-аргумент содержит что-либо, кроме двоичных цифр, результат не определён (исключение не генерируется).

Синтаксис

unbin(arg)

Аргументы

  • arg — строка, содержащая любое количество двоичных цифр. String

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

Возвращает двоичную строку (BLOB). String

Примеры

Базовое использование

SELECT UNBIN('001100000011000100110010'), UNBIN('0100110101111001010100110101000101001100')
┌─unbin('001100000011000100110010')─┬─unbin('0100110101111001010100110101000101001100')─┐
│ 012                               │ MySQL                                             │
└───────────────────────────────────┴───────────────────────────────────────────────────┘

Преобразовать в число

SELECT reinterpretAsUInt64(reverse(unbin('1110'))) AS num
┌─num─┐
│  14 │
└─────┘

unhex

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

Выполняет операцию, противоположную hex. Интерпретирует каждую пару шестнадцатеричных цифр (в аргументе) как число и преобразует его в байт, представленный этим числом. Возвращаемое значение — бинарная строка (BLOB).

Если нужно преобразовать результат в число, можно использовать функции reverse и reinterpretAs<Type>.

Примечание

clickhouse-client интерпретирует строки как UTF-8. Это может приводить к неожиданному отображению значений, возвращаемых hex.

Поддерживаются как заглавные, так и строчные буквы A-F. Количество шестнадцатеричных цифр не обязательно должно быть чётным. Если оно нечётно, последняя цифра интерпретируется как наименее значимая половина байта 00-0F. Если строковый аргумент содержит что-либо, кроме шестнадцатеричных цифр, возвращается зависящий от реализации результат (исключение не выбрасывается). Для числового аргумента обратная операция к hex(N) функцией unhex() не выполняется.

Синтаксис

unhex(arg)

Аргументы

  • arg — Строка с любым количеством шестнадцатеричных цифр. String или FixedString

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

Возвращает двоичную строку (BLOB). String

Примеры

Базовое использование

SELECT unhex('303132'), UNHEX('4D7953514C')
┌─unhex('303132')─┬─unhex('4D7953514C')─┐
│ 012             │ MySQL               │
└─────────────────┴─────────────────────┘

Преобразовать в число

SELECT reinterpretAsUInt64(reverse(unhex('FFF'))) AS num
┌──num─┐
│ 4095 │
└──────┘