2020-10-26 10:29:30 +00:00
---
2022-08-26 17:37:11 +00:00
slug: /ru/sql-reference/functions/uuid-functions
2022-04-09 13:29:05 +00:00
sidebar_position: 53
sidebar_label: "Функции для работы с UUID"
2020-10-26 10:29:30 +00:00
---
2020-03-20 18:20:59 +00:00
# Функции для работы с UUID {#funktsii-dlia-raboty-s-uuid}
2019-02-08 21:37:56 +00:00
2020-03-20 18:20:59 +00:00
## generateUUIDv4 {#uuid-function-generate}
2019-02-08 21:37:56 +00:00
Генерирует идентификатор [UUID версии 4 ](https://tools.ietf.org/html/rfc4122#section-4.4 ).
2022-05-22 23:13:43 +00:00
**Синтаксис**
2020-03-20 18:20:59 +00:00
``` sql
2022-05-22 23:13:43 +00:00
generateUUIDv4([x])
2019-02-08 21:37:56 +00:00
```
2022-05-22 23:13:43 +00:00
**Аргументы**
- `x` — [выражение ](../syntax.md#syntax-expressions ), возвращающее значение одного из [поддерживаемых типов данных ](../data-types/index.md#data_types ). Значение используется, чтобы избежать [склейки одинаковых выражений ](index.md#common-subexpression-elimination ), если функция вызывается несколько раз в одном запросе. Необязательный параметр.
2019-02-08 21:37:56 +00:00
**Возвращаемое значение**
2020-04-30 18:19:18 +00:00
Значение типа [UUID ](../../sql-reference/functions/uuid-functions.md ).
2019-02-08 21:37:56 +00:00
**Пример использования**
Этот пример демонстрирует, как создать таблицу с UUID-колонкой и добавить в нее сгенерированный UUID.
2020-03-20 18:20:59 +00:00
``` sql
2019-09-23 15:31:46 +00:00
CREATE TABLE t_uuid (x UUID) ENGINE=TinyLog
2019-02-08 21:37:56 +00:00
2019-09-23 15:31:46 +00:00
INSERT INTO t_uuid SELECT generateUUIDv4()
2019-02-08 21:37:56 +00:00
2019-09-23 15:31:46 +00:00
SELECT * FROM t_uuid
2019-02-08 21:37:56 +00:00
```
2020-03-20 18:20:59 +00:00
``` text
2019-02-08 21:37:56 +00:00
┌────────────────────────────────────x─┐
│ f4bf890f-f9dc-4332-ad5c-0c18e73f28e9 │
└──────────────────────────────────────┘
2021-08-12 13:18:33 +00:00
```
2022-05-22 23:13:43 +00:00
**Пример использования, для генерации нескольких значений в одной строке**
```sql
SELECT generateUUIDv4(1), generateUUIDv4(2)
┌─generateUUIDv4(1)────────────────────┬─generateUUIDv4(2)────────────────────┐
│ 2d49dc6e-ddce-4cd0-afb8-790956df54c1 │ 8abf8c13-7dea-4fdf-af3e-0e18767770e6 │
└──────────────────────────────────────┴──────────────────────────────────────┘
```
2024-04-24 00:33:53 +00:00
## generateUUIDv7 {#uuidv7-function-generate}
2024-04-29 18:04:44 +00:00
Генерирует идентификатор [UUID версии 7 ](https://datatracker.ietf.org/doc/html/draft-peabody-dispatch-new-uuid-format-04 ). Генерируемый UUID состоит из 48-битной временной метки (Unix time в миллисекундах), маркеров версии 7 и варианта 2, монотонно возрастающего счётчика для данной временной метки и случайных данных в указанной ниже последовательности. Для каждой новой временной метки счётчик стартует с нового случайного значения, а для следующих UUIDv7 он увеличивается на единицу. В случае переполнения счётчика временная метка принудительно увеличивается на 1, и счётчик снова стартует с о случайного значения. Монотонность возрастания счётчика для каждой временной метки гарантируется между всеми одновременно работающими функциями `generateUUIDv7` .
2024-04-24 00:33:53 +00:00
```
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
| unix_ts_ms |
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
2024-04-27 14:30:27 +00:00
| unix_ts_ms | ver | counter_high_bits |
2024-04-24 00:33:53 +00:00
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
2024-04-27 14:30:27 +00:00
|var| counter_low_bits |
2024-04-24 00:33:53 +00:00
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
| rand_b |
└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
```
2024-04-29 18:04:44 +00:00
::::note
Н а апрель 2024 года UUIDv7 находится в статусе черновика и е г о раскладка по битам может в итоге измениться.
::::
2024-04-24 00:33:53 +00:00
**Синтаксис**
``` sql
generateUUIDv7([x])
```
**Аргументы**
- `x` — [выражение ](../syntax.md#syntax-expressions ), возвращающее значение одного из [поддерживаемых типов данных ](../data-types/index.md#data_types ). Значение используется, чтобы избежать [склейки одинаковых выражений ](index.md#common-subexpression-elimination ), если функция вызывается несколько раз в одном запросе. Необязательный параметр.
**Возвращаемое значение**
Значение типа [UUID ](../../sql-reference/functions/uuid-functions.md ).
**Пример использования**
Этот пример демонстрирует, как создать таблицу с UUID-колонкой и добавить в нее сгенерированный UUIDv7.
``` sql
CREATE TABLE t_uuid (x UUID) ENGINE=TinyLog
2024-04-27 14:30:27 +00:00
INSERT INTO t_uuid SELECT generateUUIDv7WithCounter()
2024-04-24 00:33:53 +00:00
SELECT * FROM t_uuid
```
``` text
┌────────────────────────────────────x─┐
2024-04-27 14:30:27 +00:00
│ 018f05c7-56e3-7ac3-93e9-1d93c4218e0e │
2024-04-24 00:33:53 +00:00
└──────────────────────────────────────┘
```
**Пример использования, для генерации нескольких значений в одной строке**
```sql
2024-04-27 14:30:27 +00:00
SELECT generateUUIDv7(1), generateUUIDv7(2)
2024-04-24 00:33:53 +00:00
┌─generateUUIDv7(1)────────────────────┬─generateUUIDv7(2)────────────────────┐
2024-04-27 14:30:27 +00:00
│ 018f05c9-4ab8-7b86-b64e-c9f03fbd45d1 │ 018f05c9-4ab8-7b86-b64e-c9f12efb7e16 │
2024-04-24 00:33:53 +00:00
└──────────────────────────────────────┴──────────────────────────────────────┘
```
2021-08-12 13:18:33 +00:00
## empty {#empty}
Проверяет, является ли входной UUID пустым.
**Синтаксис**
```sql
empty(UUID)
```
UUID считается пустым, если он содержит все нули (нулевой UUID).
2021-08-12 13:43:56 +00:00
Функция также поддерживает работу с типами [Array ](array-functions.md#function-empty ) и [String ](string-functions.md#empty ).
2021-08-12 13:18:33 +00:00
**Параметры**
- `x` — UUID на входе функции. [UUID ](../data-types/uuid.md ).
**Возвращаемое значение**
- Возвращает `1` для пустого UUID или `0` — для непустого UUID.
Тип: [UInt8 ](../data-types/int-uint.md ).
**Пример**
Для генерации UUID-значений предназначена функция [generateUUIDv4 ](#uuid-function-generate ).
Запрос:
```sql
SELECT empty(generateUUIDv4());
```
Ответ:
```text
┌─empty(generateUUIDv4())─┐
│ 0 │
└─────────────────────────┘
```
## notEmpty {#notempty}
Проверяет, является ли входной UUID непустым.
**Синтаксис**
```sql
notEmpty(UUID)
```
UUID считается пустым, если он содержит все нули (нулевой UUID).
2021-08-12 13:43:56 +00:00
Функция также поддерживает работу с типами [Array ](array-functions.md#function-notempty ) и [String ](string-functions.md#function-notempty ).
2021-08-12 13:18:33 +00:00
**Параметры**
- `x` — UUID на входе функции. [UUID ](../data-types/uuid.md ).
**Возвращаемое значение**
- Возвращает `1` для непустого UUID или `0` — для пустого UUID.
Тип: [UInt8 ](../data-types/int-uint.md ).
**Пример**
Для генерации UUID-значений предназначена функция [generateUUIDv4 ](#uuid-function-generate ).
Запрос:
```sql
SELECT notEmpty(generateUUIDv4());
```
Результат:
```text
┌─notEmpty(generateUUIDv4())─┐
│ 1 │
└────────────────────────────┘
2019-02-08 21:37:56 +00:00
```
2020-03-20 18:20:59 +00:00
## toUUID (x) {#touuid-x}
2019-02-08 21:37:56 +00:00
Преобразует значение типа String в тип UUID.
2020-03-20 18:20:59 +00:00
``` sql
2019-02-08 21:37:56 +00:00
toUUID(String)
```
**Возвращаемое значение**
Значение типа UUID.
**Пример использования**
2020-03-20 18:20:59 +00:00
``` sql
2019-09-23 15:31:46 +00:00
SELECT toUUID('61f0c404-5cb3-11e7-907b-a6006ad3dba0') AS uuid
2019-02-08 21:37:56 +00:00
```
2020-03-20 18:20:59 +00:00
``` text
2019-02-08 21:37:56 +00:00
┌─────────────────────────────────uuid─┐
│ 61f0c404-5cb3-11e7-907b-a6006ad3dba0 │
└──────────────────────────────────────┘
```
2020-11-04 00:05:06 +00:00
## toUUIDOrNull (x) {#touuidornull-x}
Принимает строку, и пытается преобразовать в тип UUID. При неудаче возвращает NULL.
``` sql
toUUIDOrNull(String)
```
**Возвращаемое значение**
Значение типа Nullable(UUID).
**Пример использования**
``` sql
SELECT toUUIDOrNull('61f0c404-5cb3-11e7-907b-a6006ad3dba0T') AS uuid
```
``` text
┌─uuid─┐
│ ᴺᵁᴸᴸ │
└──────┘
```
## toUUIDOrZero (x) {#touuidorzero-x}
Принимает строку, и пытается преобразовать в тип UUID. При неудаче возвращает нулевой UUID.
``` sql
toUUIDOrZero(String)
```
**Возвращаемое значение**
Значение типа UUID.
**Пример использования**
``` sql
SELECT toUUIDOrZero('61f0c404-5cb3-11e7-907b-a6006ad3dba0T') AS uuid
```
``` text
┌─────────────────────────────────uuid─┐
│ 00000000-0000-0000-0000-000000000000 │
└──────────────────────────────────────┘
```
2020-03-20 18:20:59 +00:00
## UUIDStringToNum {#uuidstringtonum}
2019-02-08 21:37:56 +00:00
2020-04-30 18:19:18 +00:00
Принимает строку, содержащую 36 символов в формате `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` , и возвращает в виде набора байт в [FixedString(16) ](../../sql-reference/functions/uuid-functions.md ).
2019-02-08 21:37:56 +00:00
2020-03-20 18:20:59 +00:00
``` sql
2019-02-08 21:37:56 +00:00
UUIDStringToNum(String)
```
**Возвращаемое значение**
FixedString(16)
**Пример использования**
2020-03-20 18:20:59 +00:00
``` sql
SELECT
'612f3c40-5d3b-217e-707b-6a546a3d7b29' AS uuid,
2019-02-08 21:37:56 +00:00
UUIDStringToNum(uuid) AS bytes
```
2020-03-20 18:20:59 +00:00
``` text
2019-02-08 21:37:56 +00:00
┌─uuid─────────────────────────────────┬─bytes────────────┐
│ 612f3c40-5d3b-217e-707b-6a546a3d7b29 │ a/< @];!~p{jTj={) │
└──────────────────────────────────────┴──────────────────┘
```
2020-03-20 18:20:59 +00:00
## UUIDNumToString {#uuidnumtostring}
2019-02-08 21:37:56 +00:00
2020-04-30 18:19:18 +00:00
Принимает значение типа [FixedString(16) ](../../sql-reference/functions/uuid-functions.md ). Возвращает строку из 36 символов в текстовом виде.
2019-02-08 21:37:56 +00:00
2020-03-20 18:20:59 +00:00
``` sql
2019-02-08 21:37:56 +00:00
UUIDNumToString(FixedString(16))
```
**Возвращаемое значение**
Значение типа String.
**Пример использования**
2020-03-20 18:20:59 +00:00
``` sql
SELECT
'a/< @];!~p{jTj={)' AS bytes,
2019-02-08 21:37:56 +00:00
UUIDNumToString(toFixedString(bytes, 16)) AS uuid
```
2020-03-20 18:20:59 +00:00
``` text
2019-02-08 21:37:56 +00:00
┌─bytes────────────┬─uuid─────────────────────────────────┐
│ a/< @];!~p{jTj={) │ 612f3c40-5d3b-217e-707b-6a546a3d7b29 │
└──────────────────┴──────────────────────────────────────┘
```
2024-04-24 00:33:53 +00:00
## UUIDToNum {#uuidtonum}
Принимает UUID и возвращает в виде набора байт в [FixedString(16) ](../../sql-reference/functions/uuid-functions.md ). Также принимает необязательный второй параметр - вариант представления UUID, по умолчанию 1 - `Big-endian` (2 означает представление в формате `Microsoft` ). Данная функция заменяет последовательность из двух отдельных функций `UUIDStringToNum(toString(uuid))` , так что промежуточная конвертация из UUID в String для извлечения набора байт из UUID не требуется.
``` sql
UUIDToNum(UUID[, variant = 1])
```
**Возвращаемое значение**
FixedString(16)
**Примеры использования**
``` sql
SELECT
toUUID('612f3c40-5d3b-217e-707b-6a546a3d7b29') AS uuid,
UUIDToNum(uuid) AS bytes
```
``` text
┌─uuid─────────────────────────────────┬─bytes────────────┐
│ 612f3c40-5d3b-217e-707b-6a546a3d7b29 │ a/< @];!~p{jTj={) │
└──────────────────────────────────────┴──────────────────┘
```
``` sql
SELECT
toUUID('612f3c40-5d3b-217e-707b-6a546a3d7b29') AS uuid,
UUIDToNum(uuid, 2) AS bytes
```
```text
┌─uuid─────────────────────────────────┬─bytes────────────┐
│ 612f3c40-5d3b-217e-707b-6a546a3d7b29 │ @< /a;]~!p{jTj={) │
└──────────────────────────────────────┴──────────────────┘
```
## UUIDv7ToDateTime {#uuidv7todatetime}
Принимает UUID версии 7 и извлекает из него временную метку.
``` sql
UUIDv7ToDateTime(uuid[, timezone])
```
**Параметры**
- `uuid` — [UUID ](../data-types/uuid.md ) версии 7.
- `timezone` — [Часовой пояс ](../../operations/server-configuration-parameters/settings.md#server_configuration_parameters-timezone ) для возвращаемого значения (необязательный параметр). [String ](../../sql-reference/data-types/string.md ).
**Возвращаемое значение**
- Временная метка с миллисекундной точностью (1970-01-01 00:00:00.000 в случае UUID не версии 7).
Type: [DateTime64(3) ](/docs/ru/sql-reference/data-types/datetime64.md ).
**Примеры использования**
``` sql
SELECT UUIDv7ToDateTime(toUUID('018f05c9-4ab8-7b86-b64e-c9f03fbd45d1'))
```
```text
┌─UUIDv7ToDateTime(toUUID('018f05c9-4ab8-7b86-b64e-c9f03fbd45d1'))─┐
│ 2024-04-22 15:30:29.048 │
└──────────────────────────────────────────────────────────────────┘
```
``` sql
SELECT UUIDv7ToDateTime(toUUID('018f05c9-4ab8-7b86-b64e-c9f03fbd45d1'), 'America/New_York')
```
```text
┌─UUIDv7ToDateTime(toUUID('018f05c9-4ab8-7b86-b64e-c9f03fbd45d1'), 'America/New_York')─┐
│ 2024-04-22 08:30:29.048 │
└──────────────────────────────────────────────────────────────────────────────────────┘
```
2021-08-27 18:50:31 +00:00
## serverUUID() {#server-uuid}
2021-08-28 08:55:54 +00:00
Возвращает случайный и уникальный UUID, который генерируется при первом запуске сервера и сохраняется навсегда. Результат записывается в файл `uuid` , расположенный в каталоге сервера ClickHouse `/var/lib/clickhouse/` .
2021-08-27 18:50:31 +00:00
**Синтаксис**
```sql
serverUUID()
```
**Возвращаемое значение**
- UUID сервера.
Тип: [UUID ](../data-types/uuid.md ).
2020-03-20 18:20:59 +00:00
## См. также: {#sm-takzhe}
2019-02-08 21:37:56 +00:00
2020-04-30 18:19:18 +00:00
- [dictGetUUID ](ext-dict-functions.md )
- [dictGetUUIDOrDefault ](ext-dict-functions.md )