encoding-functions.md 6.0 KB
Newer Older
1 2 3 4 5
---
toc_priority: 52
toc_title: "\u0424\u0443\u043d\u043a\u0446\u0438\u0438\u0020\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f"
---

6
# Функции кодирования {#funktsii-kodirovaniia}
7

S
Fixes  
Sergei Bocharov 已提交
8 9
## char {#char}

A
alexey-milovidov 已提交
10
Возвращает строку, длина которой равна числу переданных аргументов, и каждый байт имеет значение соответствующего аргумента. Принимает несколько числовых аргументов. Если значение аргумента выходит за диапазон UInt8 (0..255), то оно преобразуется в UInt8 с возможным округлением и переполнением.
S
Fixes  
Sergei Bocharov 已提交
11 12 13

**Синтаксис**

14
``` sql
S
Fixes  
Sergei Bocharov 已提交
15 16 17 18 19
char(number_1, [number_2, ..., number_n]);
```

**Параметры**

20
-   `number_1, number_2, ..., number_n` — Числовые аргументы, которые интерпретируются как целые числа. Типы: [Int](../../sql-reference/functions/encoding-functions.md), [Float](../../sql-reference/functions/encoding-functions.md).
S
Fixes  
Sergei Bocharov 已提交
21 22 23

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

24
-   строка из соответствующих байт.
S
Fixes  
Sergei Bocharov 已提交
25 26 27 28 29 30 31

Тип: `String`.

**Пример**

Запрос:

32
``` sql
S
Fixes  
Sergei Bocharov 已提交
33 34 35 36 37
SELECT char(104.1, 101, 108.9, 108.9, 111) AS hello
```

Ответ:

38
``` text
S
Fixes  
Sergei Bocharov 已提交
39 40 41 42 43
┌─hello─┐
│ hello │
└───────┘
```

A
alexey-milovidov 已提交
44 45
Вы можете создать строку в произвольной кодировке, передав соответствующие байты. Пример для UTF-8:

S
Fixes  
Sergei Bocharov 已提交
46
Запрос:
47 48

``` sql
S
Fixes  
Sergei Bocharov 已提交
49 50 51 52 53
SELECT char(0xD0, 0xBF, 0xD1, 0x80, 0xD0, 0xB8, 0xD0, 0xB2, 0xD0, 0xB5, 0xD1, 0x82) AS hello;
```

Ответ:

54
``` text
S
Fixes  
Sergei Bocharov 已提交
55 56 57 58 59 60 61
┌─hello──┐
│ привет │
└────────┘
```

Запрос:

62
``` sql
S
Fixes  
Sergei Bocharov 已提交
63 64 65 66 67
SELECT char(0xE4, 0xBD, 0xA0, 0xE5, 0xA5, 0xBD) AS hello;
```

Ответ:

68
``` text
S
Fixes  
Sergei Bocharov 已提交
69 70 71 72 73
┌─hello─┐
│ 你好  │
└───────┘
```

S
Fixes  
Sergei Bocharov 已提交
74
## hex {#hex}
75

76
Returns a string containing the argument’s hexadecimal representation.
S
Fixes  
Sergei Bocharov 已提交
77 78 79

**Syntax**

80
``` sql
S
Fixes  
Sergei Bocharov 已提交
81 82 83
hex(arg)
```

A
alexey-milovidov 已提交
84
The function is using uppercase letters `A-F` and not using any prefixes (like `0x`) or suffixes (like `h`).
S
Fixes  
Sergei Bocharov 已提交
85

86
For integer arguments, it prints hex digits («nibbles») from the most significant to least significant (big endian or «human readable» order). It starts with the most significant non-zero byte (leading zero bytes are omitted) but always prints both digits of every byte even if leading digit is zero.
S
Fixes  
Sergei Bocharov 已提交
87

A
alexey-milovidov 已提交
88
Example:
S
Fixes  
Sergei Bocharov 已提交
89

A
alexey-milovidov 已提交
90
**Example**
S
Fixes  
Sergei Bocharov 已提交
91

A
alexey-milovidov 已提交
92
Query:
S
Fixes  
Sergei Bocharov 已提交
93

94
``` sql
A
alexey-milovidov 已提交
95 96
SELECT hex(1);
```
S
Fixes  
Sergei Bocharov 已提交
97

A
alexey-milovidov 已提交
98
Result:
S
Fixes  
Sergei Bocharov 已提交
99

100
``` text
A
alexey-milovidov 已提交
101 102
01
```
S
Fixes  
Sergei Bocharov 已提交
103

A
alexey-milovidov 已提交
104
Values of type `Date` and `DateTime` are formatted as corresponding integers (the number of days since Epoch for Date and the value of Unix Timestamp for DateTime).
S
Fixes  
Sergei Bocharov 已提交
105

A
alexey-milovidov 已提交
106
For `String` and `FixedString`, all bytes are simply encoded as two hexadecimal numbers. Zero bytes are not omitted.
S
Fixes  
Sergei Bocharov 已提交
107

A
alexey-milovidov 已提交
108
Values of floating point and Decimal types are encoded as their representation in memory. As we support little endian architecture, they are encoded in little endian. Zero leading/trailing bytes are not omitted.
S
Fixes  
Sergei Bocharov 已提交
109

A
alexey-milovidov 已提交
110 111
**Parameters**

112
-   `arg` — A value to convert to hexadecimal. Types: [String](../../sql-reference/functions/encoding-functions.md), [UInt](../../sql-reference/functions/encoding-functions.md), [Float](../../sql-reference/functions/encoding-functions.md), [Decimal](../../sql-reference/functions/encoding-functions.md), [Date](../../sql-reference/functions/encoding-functions.md) or [DateTime](../../sql-reference/functions/encoding-functions.md).
A
alexey-milovidov 已提交
113 114 115

**Returned value**

116
-   A string with the hexadecimal representation of the argument.
A
alexey-milovidov 已提交
117 118 119 120 121 122

Type: `String`.

**Example**

Query:
S
Fixes  
Sergei Bocharov 已提交
123

124
``` sql
S
Fixes  
Sergei Bocharov 已提交
125 126 127
SELECT hex(toFloat32(number)) as hex_presentation FROM numbers(15, 2);
```

A
alexey-milovidov 已提交
128
Result:
S
Fixes  
Sergei Bocharov 已提交
129

130
``` text
S
Fixes  
Sergei Bocharov 已提交
131 132 133 134 135 136
┌─hex_presentation─┐
│ 00007041         │
│ 00008041         │
└──────────────────┘
```

A
alexey-milovidov 已提交
137
Query:
S
Fixes  
Sergei Bocharov 已提交
138

139
``` sql
S
Fixes  
Sergei Bocharov 已提交
140 141 142
SELECT hex(toFloat64(number)) as hex_presentation FROM numbers(15, 2);
```

A
alexey-milovidov 已提交
143
Result:
S
Fixes  
Sergei Bocharov 已提交
144

145
``` text
S
Fixes  
Sergei Bocharov 已提交
146 147 148 149 150
┌─hex_presentation─┐
│ 0000000000002E40 │
│ 0000000000003040 │
└──────────────────┘
```
151

152 153 154 155
## unhex(str) {#unhexstr}

Accepts a string containing any number of hexadecimal digits, and returns a string containing the corresponding bytes. Supports both uppercase and lowercase letters A-F. The number of hexadecimal digits does not have to be even. If it is odd, the last digit is interpreted as the least significant half of the 00-0F byte. If the argument string contains anything other than hexadecimal digits, some implementation-defined result is returned (an exception isn’t thrown).
If you want to convert the result to a number, you can use the ‘reverse’ and ‘reinterpretAsType’ functions.
A
alexey-milovidov 已提交
156

157
## UUIDStringToNum(str) {#uuidstringtonumstr}
158

159
Принимает строку, содержащую 36 символов в формате `123e4567-e89b-12d3-a456-426655440000`, и возвращает в виде набора байт в FixedString(16).
160

161 162
## UUIDNumToString(str) {#uuidnumtostringstr}

163 164
Принимает значение типа FixedString(16). Возвращает строку из 36 символов в текстовом виде.

165 166
## bitmaskToList(num) {#bitmasktolistnum}

167 168
Принимает целое число. Возвращает строку, содержащую список степеней двойки, в сумме дающих исходное число; по возрастанию, в текстовом виде, через запятую, без пробелов.

169 170
## bitmaskToArray(num) {#bitmasktoarraynum}

171
Принимает целое число. Возвращает массив чисел типа UInt64, содержащий степени двойки, в сумме дающих исходное число; числа в массиве идут по возрастанию.
I
Ivan Blinkov 已提交
172

I
Ivan Blinkov 已提交
173
[Оригинальная статья](https://clickhouse.tech/docs/ru/query_language/functions/encoding_functions/) <!--hide-->