---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.6
alternate:
  - https://ydb.tech/docs/en/yql/reference/types/primitive.md
  - https://ydb.tech/docs/ru/yql/reference/types/primitive.md
sourcePath: ru/core/yql/reference/types/primitive.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb.tech/docs/ru/llms.txt

# Примитивные типы данных

<!-- markdownlint-disable blanks-around-fences -->

Термины «простые», «примитивные» и «элементарные» типы данных используются как синонимы.

## Числовые типы {#numeric}

#|
|| Тип |
Описание |
Примечания
    ||
|| `Bool` |
Логическое значение. |
    ||
|| `Int8` |
Целое число со знаком.
Допустимые значения: от –2<sup>7</sup> до 2<sup>7</sup>–1. |
    ||
|| `Int16` |
Целое число со знаком.
Допустимые значения: от –2<sup>15</sup> до 2<sup>15</sup>–1. |
    ||
|| `Int32` |
Целое число со знаком.
Допустимые значения: от –2<sup>31</sup> до 2<sup>31</sup>–1. |
    ||
|| `Int64` |
Целое число со знаком.
Допустимые значения: от –2<sup>63</sup> до 2<sup>63</sup>–1. |
    ||
|| `Uint8` |
Беззнаковое целое число.
Допустимые значения: от 0 до 2<sup>8</sup>–1. |
    ||
|| `Uint16` |
Беззнаковое целое число.
Допустимые значения: от 0 до 2<sup>16</sup>–1. |
    ||
|| `Uint32` |
Беззнаковое целое число.
Допустимые значения: от 0 до 2<sup>32</sup>–1. |
    ||
|| `Uint64` |
Беззнаковое целое число.
Допустимые значения: от 0 до 2<sup>64</sup>–1. |
    ||
|| `Float` |
Вещественное число с переменной точностью размером 4 байта. |
Не может использоваться в первичном ключе и в колонках, формирующих ключ вторичного индекса
    ||
|| `Double` |
Вещественное число с переменной точностью размером 8 байт. |
Не может использоваться в первичном ключе и в колонках, формирующих ключ вторичного индекса
    ||
|| `Decimal(precision, scale)` |
Вещественное число с фиксированной точностью размером 16 байт. Точность (precision) — максимальное общее число хранимых десятичных разрядов, принимает значения от 1 до 35. Масштаб (scale) — максимальное число хранимых десятичных разрядов справа от десятичной запятой, принимает значения от 0 до значения precision. |
    ||
|| `DyNumber` |
Бинарное представление вещественного числа точностью до 38 знаков.
Допустимые значения: положительные от 1×10<sup>-130</sup> до 1×10<sup>126</sup>–1, отрицательные от -1×10<sup>126</sup>–1 до -1×10<sup>-130</sup> и 0.
Совместим с типом `Number` AWS DynamoDB. Не рекомендуется для использования в ydb-native приложениях. | Не поддерживается в колоночных таблицах
    ||
|#

<!-- source: ru/yql/reference/_includes/type_literals_examples.md -->
### Примеры

```yql
SELECT
  Bool("true"),
  Uint8("0"),
  Int32("-1"),
  Uint32("2"),
  Int64("-3"),
  Uint64("4"),
  Float("-5"),
  Double("6"),
  Decimal("1.23", 5, 2), -- до 5 десятичных знаков, из которых 2 после запятой
  DyNumber("1"),
  String("foo"),
  Utf8("привет"),
  Yson("<a=1>[3;%false]"),
  Json(@@{"a":1,"b":null}@@),
  Date("2017-11-27"),
  Datetime("2017-11-27T13:24:00Z"),
  Timestamp("2017-11-27T13:24:00.123456Z"),
  Interval("P1W2DT2H3M4.567890S"),
  TzDate("2017-11-27,Europe/Moscow"),
  TzDatetime("2017-11-27T13:24:00,America/Los_Angeles"),
  TzTimestamp("2017-11-27T13:24:00.123456,GMT"),
  Uuid("f9d5cc3f-f1dc-4d9c-b97e-766e57ca4ccb");
```
<!-- endsource: ru/yql/reference/_includes/type_literals_examples.md -->

## Строковые типы {#string}

#|
|| Тип | Описание | Примечания ||
|| `String` |
Строка, может содержать произвольные бинарные данные |
    ||
|| `Bytes` (псведоним типа `String`) |
Строка, может содержать произвольные бинарные данные |
    ||
|| `Utf8` |
Текст в кодировке [UTF-8](https://en.wikipedia.org/wiki/UTF-8) |
    ||
|| `Text` (псведоним типа `Utf8`) |
Текст в кодировке [UTF-8](https://en.wikipedia.org/wiki/UTF-8) |
    ||
|| `Json` |
[JSON](https://en.wikipedia.org/wiki/JSON) в текстовом представлении |
Не поддерживает возможность сравнения, не может использоваться в первичном ключе и в колонках, формирующих ключ вторичного индекса
    ||
|| `JsonDocument` |
[JSON](https://en.wikipedia.org/wiki/JSON) в бинарном индексированном представлении |
Не поддерживает возможность сравнения, не может использоваться в первичном ключе и в колонках, формирующих ключ вторичного индекса
    ||
|| `Yson` |
[YSON](https://ydb.tech/docs/ru/yql/reference/types/yson.md) в текстовом или бинарном представлении |
Не поддерживает возможность сравнения, не может использоваться в первичном ключе и в колонках, формирующих ключ вторичного индекса
    ||
|| `Uuid` |
Универсальный идентификатор [UUID](https://tools.ietf.org/html/rfc4122) | Не поддерживается в колоночных таблицах
    ||
|#

{% note info "Ограничения на размер" %}

Максимальный размер значения в ячейке  неключевого столбца  с любым строковым типом данных —  8 МБ.

{% endnote %}

В отличие от типа данных `Json`, который хранит исходное текстовое представление, переданное пользователем, `JsonDocument` использует бинарное индексированное представление. Важное отличие с точки зрения семантики состоит в том, что `JsonDocument` не сохраняет форматирование, порядок ключей в объектах и их дубликаты.

За счет индексированного представления `JsonDocument` позволяет обходить документную модель с использованием `JsonPath` без необходимости парсинга всего содержимого. Это позволяет эффективно выполнять операции из [JSON API](https://ydb.tech/docs/ru/yql/reference/builtins/json.md), уменьшая задержки и стоимость пользовательских запросов. Выполнение запросов над `JsonDocument` может быть до нескольких раз эффективнее в зависимости от типа нагрузки.

Из-за добавленной избыточности `JsonDocument` менее эффективен в хранении. Дополнительные накладные расходы на хранение зависят от конкретного содержимого и в среднем составляют 20–30% от исходного объема. Сохранение данных в формате `JsonDocument` требует дополнительной конвертации из текстового представления, что делает его запись менее эффективной. Тем не менее, для большинства read-intensive сценариев, подразумевающих обработку данных из JSON, этот тип данных является предпочтительным и рекомендуется к использованию.

{% note warning %}

Для хранения чисел (JSON Number) в `JsonDocument`, а также для арифметических операций над ними в [JSON API](https://ydb.tech/docs/ru/yql/reference/builtins/json.md) используется тип [Double](https://en.wikipedia.org/wiki/Double-precision_floating-point_format). Возможна потеря точности при использовании нестандартных представлений чисел в исходном JSON-документе.

{% endnote %}

## Дата и время {#datetime}

#|
|| Тип | Описание | Возможные значения | Размер (байты) | Примечания ||

||
`Date`
|
Момент времени, соответствующий полуночи<sup>1</sup> по UTC, точность до дней
|
с 00:00 01.01.1970 до 00:00 01.01.2106
|
2
|
—
||

||
`Date32`
|
Момент времени, соответствующий полуночи<sup>1</sup> по UTC, точность до дней
|
с 00:00 01.01.144169 до н.э. по 00:00 01.01.148107 н.э.
|
4
|
—
||

||
`Datetime`
|
Момент времени по UTC, точность до секунд
|
с 00:00 01.01.1970 до 00:00 01.01.2106
|
4
|
—
||

||
`Datetime64`
|
Момент времени по UTC, точность до секунд
|
с 00:00 01.01.144169 до н.э. по 00:00 01.01.148107 н.э.
|
8
|
—
||

||
`Timestamp`
|
Момент времени по UTC с точностью до микросекунд
|
с 00:00 01.01.1970 до 00:00 01.01.2106
|
8
|
—
||

||
`Timestamp64`
|
Момент времени по UTC с точностью до микросекунд
|
с 00:00 01.01.144169 до н.э. по 00:00 01.01.148107 н.э.
|
8
|
—
||

||
`Interval`
|
Интервал времени, точность до микросекунд
|
от -136 лет до +136 лет
|
8
|
Не поддерживается в колоночных таблицах
||

||
`Interval64`
|
Интервал времени, точность до микросекунд
|
от -292277 лет до +292277 лет
|
8
|
Не поддерживается в колоночных таблицах
||

||
`TzDate`
|
Момент времени по UTC, соответствующий полуночи в заданной таймзоне
|
с 00:00 01.01.1970 до 00:00 01.01.2106
|

|
Не поддерживается в столбцах таблиц
||

||
`TzDate32`
|
Момент времени по UTC, соответствующий полуночи в заданной таймзоне
|
с 00:00 01.01.144169 до н.э. по 00:00 01.01.148107 н.э.
|
4 и метка таймзоны
|
—
||

||
`TzDateTime`
|
Момент времени по UTC с меткой временной зоны и точностью до секунд
|
с 00:00 01.01.1970 до 00:00 01.01.2106
|

|
Не поддерживается в столбцах таблиц
||

||
`TzDateTime64`
|
Момент времени по UTC с меткой временной зоны и точностью до секунд
|
с 00:00 01.01.144169 до н.э. по 00:00 01.01.148107 н.э.
|
8 и метка таймзоны
|
—
||

||
`TzTimestamp`
|
Момент времени по UTC с меткой временной зоны и точностью до микросекунд
|
с 00:00 01.01.1970 до 00:00 01.01.2106
|

|
Не поддерживается в столбцах таблиц
||

||
`TzTimestamp64`
|
Момент времени по UTC с меткой временной зоны и точностью до микросекунд
|
с 00:00 01.01.144169 до н.э. по 00:00 01.01.148107 н.э.
|
8 и метка таймзоны
|
—
||
|#

<sup>1</sup> Под полночью понимается момент времени, в котором все компоненты _времени_ равны нулю.

### Особенности поддержки типа Interval {#interval-type-behavior-and-limitations}

Тип `Interval` использует синтаксис, основанный на стандарте [ISO 8601](https://ru.wikipedia.org/wiki/ISO_8601), с рядом особенностей:

* поддерживаются только интервалы, которые можно представить в виде целого числа микросекунд (не поддерживаются интервалы в годах `Y` и месяцах `M` из-за их переменной продолжительности);
* не поддерживаются варианты с началом/концом интервала, а также повторами;
* поддерживается использование отрицательного знака для обозначения сдвига в прошлое;
* поддерживается совмещение литерала недели `W` с другими литералами;
* микросекунды могут быть указаны в виде дробной части секунд.

#### Примеры использования {#interval-data-examples}

```yql
SELECT
    Interval("P1W2DT2H3M4.567890S"), -- интервал 1 неделя 2 дня 2 часа 3 минуты 4.567890 секунды
    Interval("P1W"),                 -- интервал 1 неделя (7 дней)
    Interval("-P1D");                -- интервал в прошлое 1 сутки (24 часа)
```

### Особенности поддержки типов с меткой временной зоны

Метка временной зоны у типов `TzDate`, `TzDatetime`, `TzTimestamp` это атрибут, который используется:

* При преобразовании ([CAST](https://ydb.tech/docs/ru/yql/reference/syntax/expressions.md#cast), [DateTime::Parse](https://ydb.tech/docs/ru/yql/reference/udf/list/datetime.md#parse), [DateTime::Format](https://ydb.tech/docs/ru/yql/reference/udf/list/datetime.md#format)) в строку и из строки.
* В [DateTime::Split](https://ydb.tech/docs/ru/yql/reference/udf/list/datetime.md#split) - появляется компонент таймзоны в `Resource<TM>`.

Само значение позиции во времени у этих типов хранится в UTC, и метка таймзоны никак не участвует в прочих расчётах. Например:

```yql
SELECT -- эти выражения всегда true для любых таймзон: таймзона не влияет на точку во времени.
    AddTimezone(CurrentUtcDate(), "Europe/Moscow") ==
        AddTimezone(CurrentUtcDate(), "America/New_York"),
    AddTimezone(CurrentUtcDatetime(), "Europe/Moscow") ==
        AddTimezone(CurrentUtcDatetime(), "America/New_York");
```

Важно понимать, что при преобразованиях между `TzDate` и `TzDatetime` или `TzTimestamp` дате соответствует не полночь по локальному времени таймзоны, а полночь по UTC для даты в UTC.


## Приведение простых типов данных {#cast}

### Явное приведение {#explicit-cast}

Явное приведение при помощи [CAST](https://ydb.tech/docs/ru/yql/reference/syntax/expressions.md#cast):

#### Приведение к числовым типам

| Тип             | Bool           | Int8           | Int16          | Int32          | Int64          | Uint8            | Uint16           | Uint32           | Uint64           | Float          | Double         | Decimal |
| --------------- | -------------- | -------------- | -------------- | -------------- | -------------- | ---------------- | ---------------- | ---------------- | ---------------- | -------------- | -------------- | ------- |
| **Bool**        | —              | Да<sup>1</sup> | Да<sup>1</sup> | Да<sup>1</sup> | Да<sup>1</sup> | Да<sup>1</sup>   | Да<sup>1</sup>   | Да<sup>1</sup>   | Да<sup>1</sup>   | Да<sup>1</sup> | Да<sup>1</sup> | Нет     |
| **Int8**        | Да<sup>2</sup> | —              | Да             | Да             | Да             | Да<sup>3</sup>   | Да<sup>3</sup>   | Да<sup>3</sup>   | Да<sup>3</sup>   | Да             | Да             | Да      |
| **Int16**       | Да<sup>2</sup> | Да<sup>4</sup> | —              | Да             | Да             | Да<sup>3,4</sup> | Да<sup>3</sup>   | Да<sup>3</sup>   | Да<sup>3</sup>   | Да             | Да             | Да      |
| **Int32**       | Да<sup>2</sup> | Да<sup>4</sup> | Да<sup>4</sup> | —              | Да             | Да<sup>3,4</sup> | Да<sup>3,4</sup> | Да<sup>3</sup>   | Да<sup>3</sup>   | Да             | Да             | Да      |
| **Int64**       | Да<sup>2</sup> | Да<sup>4</sup> | Да<sup>4</sup> | Да<sup>4</sup> | —              | Да<sup>3,4</sup> | Да<sup>3,4</sup> | Да<sup>3,4</sup> | Да<sup>3</sup>   | Да             | Да             | Да      |
| **Uint8**       | Да<sup>2</sup> | Да<sup>4</sup> | Да             | Да             | Да             | —                | Да               | Да               | Да               | Да             | Да             | Да      |
| **Uint16**      | Да<sup>2</sup> | Да<sup>4</sup> | Да<sup>4</sup> | Да             | Да             | Да<sup>4</sup>   | —                | Да               | Да               | Да             | Да             | Да      |
| **Uint32**      | Да<sup>2</sup> | Да<sup>4</sup> | Да<sup>4</sup> | Да<sup>4</sup> | Да             | Да<sup>4</sup>   | Да<sup>4</sup>   | —                | Да               | Да             | Да             | Да      |
| **Uint64**      | Да<sup>2</sup> | Да<sup>4</sup> | Да<sup>4</sup> | Да<sup>4</sup> | Да<sup>4</sup> | Да<sup>4</sup>   | Да<sup>4</sup>   | Да<sup>4</sup>   | —                | Да             | Да             | Да      |
| **Float**       | Да<sup>2</sup> | Да<sup>4</sup> | Да<sup>4</sup> | Да<sup>4</sup> | Да<sup>4</sup> | Да<sup>3,4</sup> | Да<sup>3,4</sup> | Да<sup>3,4</sup> | Да<sup>3,4</sup> | —              | Да             | Нет     |
| **Double**      | Да<sup>2</sup> | Да<sup>4</sup> | Да<sup>4</sup> | Да<sup>4</sup> | Да<sup>4</sup> | Да<sup>3,4</sup> | Да<sup>3,4</sup> | Да<sup>3,4</sup> | Да<sup>3,4</sup> | Да             | —              | Нет     |
| **Decimal**     | Нет            | Да             | Да             | Да             | Да             | Да               | Да               | Да               | Да               | Да             | Да             | —       |
| **String**      | Да             | Да             | Да             | Да             | Да             | Да               | Да               | Да               | Да               | Да             | Да             | Да      |
| **Bytes**       | Да             | Да             | Да             | Да             | Да             | Да               | Да               | Да               | Да               | Да             | Да             | Да      |
| **Utf8**        | Да             | Да             | Да             | Да             | Да             | Да               | Да               | Да               | Да               | Да             | Да             | Да      |
| **Text**        | Да             | Да             | Да             | Да             | Да             | Да               | Да               | Да               | Да               | Да             | Да             | Да      |
| **Json**        | Нет            | Нет            | Нет            | Нет            | Нет            | Нет              | Нет              | Нет              | Нет              | Нет            | Нет            | Нет     |
| **Yson**        | Да<sup>5</sup> | Да<sup>5</sup> | Да<sup>5</sup> | Да<sup>5</sup> | Да<sup>5</sup> | Да<sup>5</sup>   | Да<sup>5</sup>   | Да<sup>5</sup>   | Да<sup>5</sup>   | Да<sup>5</sup> | Да<sup>5</sup> | Нет     |
| **Uuid**        | Нет            | Нет            | Нет            | Нет            | Нет            | Нет              | Нет              | Нет              | Нет              | Нет            | Нет            | Нет     |
| **Date**        | Нет            | Да<sup>4</sup> | Да<sup>4</sup> | Да             | Да             | Да<sup>4</sup>   | Да               | Да               | Да               | Да             | Да             | Нет     |
| **Datetime**    | Нет            | Да<sup>4</sup> | Да<sup>4</sup> | Да<sup>4</sup> | Да             | Да<sup>4</sup>   | Да<sup>4</sup>   | Да               | Да               | Да             | Да             | Нет     |
| **Timestamp**   | Нет            | Да<sup>4</sup> | Да<sup>4</sup> | Да<sup>4</sup> | Да<sup>4</sup> | Да<sup>4</sup>   | Да<sup>4</sup>   | Да<sup>4</sup>   | Да               | Да             | Да             | Нет     |
| **Interval**    | Нет            | Да<sup>4</sup> | Да<sup>4</sup> | Да<sup>4</sup> | Да             | Да<sup>3,4</sup> | Да<sup>3,4</sup> | Да<sup>3,4</sup> | Да<sup>3</sup>   | Да             | Да             | Нет     |
| **Date32**      | Нет            | Да<sup>4</sup> | Да<sup>4</sup> | Да             | Да             | Да<sup>4</sup>   | Да               | Да               | Да               | Да             | Да             | Нет     |
| **Datetime64**  | Нет            | Да<sup>4</sup> | Да<sup>4</sup> | Да<sup>4</sup> | Да             | Да<sup>4</sup>   | Да<sup>4</sup>   | Да               | Да               | Да             | Да             | Нет     |
| **Timestamp64** | Нет            | Да<sup>4</sup> | Да<sup>4</sup> | Да<sup>4</sup> | Да<sup>4</sup> | Да<sup>4</sup>   | Да<sup>4</sup>   | Да<sup>4</sup>   | Да               | Да             | Да             | Нет     |
| **Interval64**  | Нет            | Да<sup>4</sup> | Да<sup>4</sup> | Да<sup>4</sup> | Да             | Да<sup>3,4</sup> | Да<sup>3,4</sup> | Да<sup>3,4</sup> | Да<sup>3</sup>   | Да             | Да             | Нет     |

<sup>1</sup> `True` преобразуется в `1`, `False` преобразуется в `0`.
<sup>2</sup> Любое значение кроме `0` преобразуется в `True`, `0` преобразуется в `False`.
<sup>3</sup> Возможно только в случае неотрицательного значения.
<sup>4</sup> Возможно только в случае попадания в диапазон допустимых значений.
<sup>5</sup> При помощи встроенной функции [Yson::ConvertTo](https://ydb.tech/docs/ru/yql/reference/udf/list/yson.md#ysonconvertto).

#### Приведение к типам данных даты и времени

| Тип             | Date | Datetime | Timestamp | Interval | Date32 | Datetime64 | Timestamp64 | Interval64 |
| --------------- | ---- | -------- | --------- | -------- | ------ | ---------- | ----------- | ---------- |
| **Bool**        | Нет  | Нет      | Нет       | Нет      | Нет    | Нет        | Нет         | Нет        |
| **Int8**        | Да   | Да       | Да        | Да       | Да     | Да         | Да          | Да         |
| **Int16**       | Да   | Да       | Да        | Да       | Да     | Да         | Да          | Да         |
| **Int32**       | Да   | Да       | Да        | Да       | Да     | Да         | Да          | Да         |
| **Int64**       | Да   | Да       | Да        | Да       | Да     | Да         | Да          | Да         |
| **Uint8**       | Да   | Да       | Да        | Да       | Да     | Да         | Да          | Да         |
| **Uint16**      | Да   | Да       | Да        | Да       | Да     | Да         | Да          | Да         |
| **Uint32**      | Да   | Да       | Да        | Да       | Да     | Да         | Да          | Да         |
| **Uint64**      | Да   | Да       | Да        | Да       | Да     | Да         | Да          | Да         |
| **Float**       | Нет  | Нет      | Нет       | Нет      | Нет    | Нет        | Нет         | Нет        |
| **Double**      | Нет  | Нет      | Нет       | Нет      | Нет    | Нет        | Нет         | Нет        |
| **Decimal**     | Нет  | Нет      | Нет       | Нет      | Нет    | Нет        | Нет         | Нет        |
| **String**      | Да   | Да       | Да        | Да       | Да     | Да         | Да          | Да         |
| **Bytes**       | Да   | Да       | Да        | Да       | Да     | Да         | Да          | Да         |
| **Utf8**        | Да   | Да       | Да        | Да       | Да     | Да         | Да          | Да         |
| **Text**        | Да   | Да       | Да        | Да       | Да     | Да         | Да          | Да         |
| **Json**        | Нет  | Нет      | Нет       | Нет      | Нет    | Нет        | Нет         | Нет        |
| **Yson**        | Нет  | Нет      | Нет       | Нет      | Нет    | Нет        | Нет         | Нет        |
| **Uuid**        | Нет  | Нет      | Нет       | Нет      | Нет    | Нет        | Нет         | Нет        |
| **Date**        | —    | Да       | Да        | Нет      | Да     | Да         | Да          | Нет        |
| **Datetime**    | Да   | —        | Да        | Нет      | Да     | Да         | Да          | Нет        |
| **Timestamp**   | Да   | Да       | —         | Нет      | Да     | Да         | Да          | Нет        |
| **Interval**    | Нет  | Нет      | Нет       | —        | Нет    | Нет        | Нет         | Да         |
| **Date32**      | Да   | Да       | Да        | Нет      | —      | Да         | Да          | Нет        |
| **Datetime64**  | Да   | Да       | Да        | Нет      | Да     | —          | Да          | Нет        |
| **Timestamp64** | Да   | Да       | Да        | Нет      | Да     | Да         | —           | Нет        |
| **Interval64**  | Нет  | Нет      | Нет       | Да       | Нет    | Нет        | Нет         | —          |

#### Приведение к другим типам данных

| Тип             | String         | Bytes          | Utf8 | Text | Json | Yson | Uuid |
| --------------- | -------------- | -------------- | ---- | ---- | ---- | ---- | ---- |
| **Bool**        | Да             | Да             | Нет  | Нет  | Нет  | Нет  | Нет  |
| **Int8**        | Да             | Да             | Нет  | Нет  | Нет  | Нет  | Нет  |
| **Int16**       | Да             | Да             | Нет  | Нет  | Нет  | Нет  | Нет  |
| **Int32**       | Да             | Да             | Нет  | Нет  | Нет  | Нет  | Нет  |
| **Int64**       | Да             | Да             | Нет  | Нет  | Нет  | Нет  | Нет  |
| **Uint8**       | Да             | Да             | Нет  | Нет  | Нет  | Нет  | Нет  |
| **Uint16**      | Да             | Да             | Нет  | Нет  | Нет  | Нет  | Нет  |
| **Uint32**      | Да             | Да             | Нет  | Нет  | Нет  | Нет  | Нет  |
| **Uint64**      | Да             | Да             | Нет  | Нет  | Нет  | Нет  | Нет  |
| **Float**       | Да             | Да             | Нет  | Нет  | Нет  | Нет  | Нет  |
| **Double**      | Да             | Да             | Нет  | Нет  | Нет  | Нет  | Нет  |
| **Decimal**     | Да             | Да             | Нет  | Нет  | Нет  | Нет  | Нет  |
| **String**      | —              | —              | Да   | Да   | Да   | Да   | Да   |
| **Bytes**       | —              | —              | Да   | Да   | Да   | Да   | Да   |
| **Utf8**        | Да             | Да             | —    | —    | Нет  | Нет  | Нет  |
| **Text**        | Да             | Да             | —    | —    | Нет  | Нет  | Нет  |
| **Json**        | Да             | Да             | Да   | Да   | —    | Нет  | Нет  |
| **Yson**        | Да<sup>1</sup> | Да<sup>1</sup> | Нет  | Нет  | Нет  | Нет  | Нет  |
| **Uuid**        | Да             | Да             | Да   | Да   | Нет  | Нет  | —    |
| **Date**        | Да             | Да             | Да   | Да   | Нет  | Нет  | Нет  |
| **Datetime**    | Да             | Да             | Да   | Да   | Нет  | Нет  | Нет  |
| **Timestamp**   | Да             | Да             | Да   | Да   | Нет  | Нет  | Нет  |
| **Interval**    | Да             | Да             | Да   | Да   | Нет  | Нет  | Нет  |
| **Date32**      | Да             | Да             | Да   | Да   | Нет  | Нет  | Нет  |
| **Datetime64**  | Да             | Да             | Да   | Да   | Нет  | Нет  | Нет  |
| **Timestamp64** | Да             | Да             | Да   | Да   | Нет  | Нет  | Нет  |
| **Interval64**  | Да             | Да             | Да   | Да   | Нет  | Нет  | Нет  |


<sup>1</sup> С помощью встроенной функции [Yson::ConvertTo](https://ydb.tech/docs/ru/yql/reference/udf/list/yson.md#ysonconvertto).

##### Примеры

<!-- source: ru/yql/reference/_includes/cast_examples.md -->
```yql
SELECT
    CAST("12345" AS Double),                -- 12345.0
    CAST(1.2345 AS Uint8),                  -- 1
    CAST(12345 AS String),                  -- "12345"
    CAST("1.2345" AS Decimal(5, 2)),        -- 1.23
    CAST("xyz" AS Uint64) IS NULL,          -- true, так как не удалось
    CAST(-1 AS Uint16) IS NULL,             -- true, отрицательное в беззнаковое
    CAST([-1, 0, 1] AS List<Uint8?>),             -- [null, 0, 1]
        --Тип элемента опциональный: неудачный элемент в null.
    CAST(["3.14", "bad", "42"] AS List<Float>),   -- [3.14, 42]
        --Тип элемента не опциональный: неудачный элемент удалён.
    CAST(255 AS Uint8),                     -- 255
    CAST(256 AS Uint8) IS NULL;             -- true, выходит за диапазон
```
<!-- endsource: ru/yql/reference/_includes/cast_examples.md -->

### Неявное приведение {#implicit-cast}

Неявное приведение типов, которое возникает в базовых операциях (`+`, `-`, `*`, `/`, `%`) между разными типами данных. В ячейках таблицы указан тип результата операции, если она возможна:

#### Числовые типы

При несовпадении числовых типов сначала выполняется [BITCAST](https://ydb.tech/docs/ru/yql/reference/syntax/expressions.md#bitcast) обоих аргументов к типу результата, а потом уже операция.

| Тип        | Int8     | Int16    | Int32    | Int64    | Uint8    | Uint16   | Uint32   | Uint64   | Float    | Double   |
| ---------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- |
| **Int8**   | —        | `Int16`  | `Int32`  | `Int64`  | `Int8`   | `Uint16` | `Uint32` | `Uint64` | `Float`  | `Double` |
| **Int16**  | `Int16`  | —        | `Int32`  | `Int64`  | `Int16`  | `Int16`  | `Uint32` | `Uint64` | `Float`  | `Double` |
| **Int32**  | `Int32`  | `Int32`  | —        | `Int64`  | `Int32`  | `Int32`  | `Int32`  | `Uint64` | `Float`  | `Double` |
| **Int64**  | `Int64`  | `Int64`  | `Int64`  | —        | `Int64`  | `Int64`  | `Int64`  | `Int64`  | `Float`  | `Double` |
| **Uint8**  | `Int8`   | `Int16`  | `Int32`  | `Int64`  | —        | `Uint16` | `Uint32` | `Uint64` | `Float`  | `Double` |
| **Uint16** | `Uint16` | `Int16`  | `Int32`  | `Int64`  | `Uint16` | —        | `Uint32` | `Uint64` | `Float`  | `Double` |
| **Uint32** | `Uint32` | `Uint32` | `Int32`  | `Int64`  | `Uint32` | `Uint32` | —        | `Uint64` | `Float`  | `Double` |
| **Uint64** | `Uint64` | `Uint64` | `Uint64` | `Int64`  | `Uint64` | `Uint64` | `Uint64` | —        | `Float`  | `Double` |
| **Float**  | `Float`  | `Float`  | `Float`  | `Float`  | `Float`  | `Float`  | `Float`  | `Float`  | —        | `Double` |
| **Double** | `Double` | `Double` | `Double` | `Double` | `Double` | `Double` | `Double` | `Double` | `Double` | —        |

#### Типы даты и времени

| Тип               | Date | Datetime   | Timestamp   | Interval | TzDate   | TzDatetime   | TzTimestamp   | Date32   | Datetime64   | Timestamp64   | Interval64 | TzDate32   | TzDatetime64   | TzTimestamp64   |
| ----------------- | ---- | ---------- | ----------- | -------- | -------- | ------------ | ------------- | -------- | ------------ | ------------- | ---------- | ---------- | -------------- | --------------- |
| **Date**          | —    | `DateTime` | `Timestamp` | —        | `TzDate` | `TzDatetime` | `TzTimestamp` | `Date32` | `DateTime64` | `Timestamp64` | —          | `TzDate32` | `TzDatetime64` | `TzTimestamp64` |
| **Datetime**      | —    | —          | `Timestamp` | —        | —        | `TzDatetime` | `TzTimestamp` | —        | `Datetime64` | `Timestamp64` | —          | —          | `TzDatetime64` | `TzTimestamp64` |
| **Timestamp**     | —    | —          | —           | —        | —        | —            | `TzTimestamp` | —        | —            | `Timestamp64` | —          | —          | —              | `TzTimestamp64` |
| **Interval**      | —    | —          | —           | —        | —        | —            | —             | —        | —            | —             | —          | —          | —              | —               |
| **TzDate**        | —    | —          | —           | —        | —        | `TzDatetime` | `TzTimestamp` | —        | —            | —             | —          | `TzDate32` | `TzDatetime64` | `TzTimestamp64` |
| **TzDatetime**    | —    | —          | —           | —        | —        | —            | `TzTimestamp` | —        | —            | —             | —          | —          | `TzDatetime64` | `TzTimestamp64` |
| **TzTimestamp**   | —    | —          | —           | —        | —        | —            | —             | —        | —            | —             | —          | —          | —              | `TzTimestamp64` |
| **Date32**        | —    | —          | —           | —        | —        | —            | —             | —        | `DateTime64` | `Timestamp64` | —          | `TzDate32` | `TzDatetime64` | `TzTimestamp64` |
| **Datetime64**    | —    | —          | —           | —        | —        | —            | —             | —        | —            | `Timestamp64` | —          | —          | `TzDatetime64` | `TzTimestamp64` |
| **Timestamp64**   | —    | —          | —           | —        | —        | —            | —             | —        | —            | —             | —          | —          | —              | `TzTimestamp64` |
| **Interval64**    | —    | —          | —           | —        | —        | —            | —             | —        | —            | —             | —          | —          | —              | —               |
| **TzDate32**      | —    | —          | —           | —        | —        | —            | —             | —        | —            | —             | —          | —          | `TzDatetime64` | `TzTimestamp64` |
| **TzDatetime64**  | —    | —          | —           | —        | —        | —            | —             | —        | —            | —             | —          | —          | —              | `TzTimestamp64` |
| **TzTimestamp64** | —    | —          | —           | —        | —        | —            | —             | —        | —            | —             | —          | —          | —              | —               |
