This commit is contained in:
Sergei Bocharov 2020-01-20 13:51:40 +03:00
parent dc1c283f1c
commit 2d32ff9c92
2 changed files with 77 additions and 11 deletions

View File

@ -10,22 +10,20 @@ Returns a string containing the argument's hexadecimal representation.
**Syntax**
```sql
hex(arg);
hex(arg)
```
Uses uppercase letters `A-F`. Does not use `0x` prefixes or `h` suffixes.
The result of the function depends on the type of argument.
The result of the function depends on the type of argument. Uses uppercase letters `A-F`. Does not use `0x` prefixes or `h` suffixes.
For strings, all bytes are simply encoded as two hexadecimal numbers.
Numbers are converted to big endian ("human readable") format. For numbers, older zeros are trimmed, but only by entire bytes.
Numbers are converted to big engine ("human readable") format. For numbers, older zeros are trimmed, but only by entire bytes.
`Date` is encoded as the number of days since the beginning of the Unix epoch.
For example:
`DateTime` is encoded as the number of seconds since the beginning of the Unix epoch.
`Float` and `Decimal` is encoded as their hexadecimal representation in memory.
- `Date` is encoded as the number of days since the beginning of the Unix epoch.
- `DateTime` is encoded as the number of seconds since the beginning of the Unix epoch.
- `Float` and `Decimal` is encoded as their hexadecimal representation in memory.
**Parameters**
@ -39,10 +37,14 @@ Type: `String`.
**Example**
Query:
```sql
SELECT hex(toFloat32(number)) as hex_presentation FROM numbers(15, 2);
```
Result:
```text
┌─hex_presentation─┐
│ 00007041 │
@ -50,10 +52,14 @@ SELECT hex(toFloat32(number)) as hex_presentation FROM numbers(15, 2);
└──────────────────┘
```
Query:
```sql
SELECT hex(toFloat64(number)) as hex_presentation FROM numbers(15, 2);
```
Result:
```text
┌─hex_presentation─┐
│ 0000000000002E40 │

View File

@ -1,8 +1,68 @@
# Функции кодирования
## hex
## hex {#hex}
Принимает аргументы типов: `String`, `unsigned integer`, `float`, `decimal`, `Date`, or `DateTime`. Возвращает строку, содержащую шестнадцатеричное представление аргумента. Используются заглавные буквы `A-F`. Не используются префиксы `0x` и суффиксы `h`. Для строк просто все байты кодируются в виде двух шестнадцатеричных цифр. Числа выводятся в big endian ("человеческом") формате. Для чисел вырезаются старшие нули, но только по целым байтам. Например, `hex(1) = '01'`. `Date` кодируется как число дней с начала unix-эпохи. `DateTime` кодируются как число секунд с начала unix-эпохи. `float` и `decimal` кодируются как их шестнадцатеричное представление в памяти.
Возвращает строку, содержащую шестнадцатеричное представление аргумента.
**Syntax**
```sql
hex(arg)
```
Результат зависит от типа передаваемого аргумента. Используйте заглавные буквы `A-F`. Не используйте префиксы `0x` и суффиксы `h`.
Для строк просто все байты кодируются в виде двух шестнадцатеричных цифр.
Числа преобразуются в big engine («человекочитаемый») формат. Для чисел вырезаются старшие нули, но только по целым байтам.
Например:
- `Date` кодируется как число дней с начала Unix-эпохи.
- `DateTime` кодируются как число секунд с начала Unix-эпохи.
- `Float` и `Decimal` кодируются как их шестнадцатеричное представление в памяти.
**Параметры**
- `arg` — Значение для преобразования в шестнадцатеричное. Типы: [String](../../data_types/string.md), [UInt](../../data_types/int_uint.md), [Float](../../data_types/float.md), [Decimal](../../data_types/decimal.md), [Date](../../data_types/date.md) or [DateTime](../../data_types/datetime.md).
**Влзвращаемое значение**
- Строковое шестнадцатеричное представление переданного аргумента.
Тип: `String`.
**Пример**
Запрос:
```sql
SELECT hex(toFloat32(number)) as hex_presentation FROM numbers(15, 2);
```
Ответ:
```text
┌─hex_presentation─┐
│ 00007041 │
│ 00008041 │
└──────────────────┘
```
Запрос:
```sql
SELECT hex(toFloat64(number)) as hex_presentation FROM numbers(15, 2);
```
Ответ:
```text
┌─hex_presentation─┐
│ 0000000000002E40 │
│ 0000000000003040 │
└──────────────────┘
```
## unhex(str)
Принимает строку, содержащую произвольное количество шестнадцатеричных цифр, и возвращает строку, содержащую соответствующие байты. Поддерживаются как строчные, так и заглавные буквы A-F. Число шестнадцатеричных цифр не обязано быть чётным. Если оно нечётное - последняя цифра интерпретируется как младшая половинка байта 00-0F. Если строка-аргумент содержит что-либо кроме шестнадцатеричных цифр, то будет возвращён какой-либо implementation-defined результат (не кидается исключение).