> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Документация по типу данных Time64 в ClickHouse, который хранит время суток с точностью до долей секунды

# Time64

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

Шаг (precision): 10<sup>-precision</sup> секунд. Допустимый диапазон: 0..9. Обычно используются значения 3 (миллисекунды), 6 (микросекунды) и 9 (наносекунды).

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

```sql theme={null}
Time64(precision)
```

Внутри `Time64` хранит знаковое 64-битное десятичное число (Decimal64), представляющее дробное количество секунд.
Разрешение тиков определяется параметром `precision`.
Часовые пояса не поддерживаются: указание часового пояса для `Time64` вызовет ошибку.

В отличие от `DateTime64`, `Time64` не хранит компонент даты.
См. также [`Time`](/ru/reference/data-types/time).

Диапазон текстового представления: \[-999:59:59.000, 999:59:59.999] для `precision = 3`. В общем случае минимальное значение — `-999:59:59`, а максимальное — `999:59:59`, с количеством цифр в дробной части до `precision` (для `precision = 9` минимальное значение равно `-999:59:59.999999999`).

<div id="implementation-details">
  ## Подробности реализации
</div>

**Представление**.
Знаковое значение `Decimal64`, хранящее количество долей секунды с `precision` знаками после запятой.

**Нормализация**.
При разборе строк в `Time64` компоненты времени нормализуются, а не проверяются на корректность.
Например, `25:70:70` интерпретируется как `26:11:10`.

**Отрицательные значения**.
Поддерживаются и сохраняются ведущие знаки минус.
Отрицательные значения обычно возникают в результате арифметических операций со значениями `Time64`.
Для `Time64` отрицательные входные значения сохраняются как для текстовых входных данных (например, `'-01:02:03.123'`), так и для числовых (например, `-3723.123`).

**Насыщение**.
Компонент времени суток ограничивается диапазоном \[-999:59:59.xxx, 999:59:59.xxx] при преобразовании в компоненты или сериализации в текст.
Сохранённое числовое значение может выходить за пределы этого диапазона; однако при любом извлечении компонентов (часы, минуты, секунды) и в текстовом представлении используется значение с учётом этого ограничения.

**Часовые пояса**.
`Time64` не поддерживает часовые пояса.
Указание часового пояса при создании типа или значения `Time64` вызывает ошибку.
Аналогично, попытки применить или изменить часовой пояс для столбцов `Time64` не поддерживаются и также приводят к ошибке.

<div id="examples">
  ## Примеры
</div>

1. Создание таблицы со столбцом типа `Time64` и вставка данных в неё:

```sql theme={null}
CREATE TABLE tab64
(
    `event_id` UInt8,
    `time` Time64(3)
)
ENGINE = TinyLog;
```

```sql theme={null}
-- Разобрать Time64
-- - из строки,
-- - из количества секунд с 00:00:00 (дробная часть согласно precision).
INSERT INTO tab64 VALUES (1, '14:30:25'), (2, 52225.123), (3, '14:30:25');

SELECT * FROM tab64 ORDER BY event_id;
```

```text theme={null}
   ┌─event_id─┬────────time─┐
1. │        1 │ 14:30:25.000 │
2. │        2 │ 14:30:25.123 │
3. │        3 │ 14:30:25.000 │
   └──────────┴──────────────┘
```

2. Фильтрация значений `Time64`

```sql theme={null}
SELECT * FROM tab64 WHERE time = toTime64('14:30:25', 3);
```

```text theme={null}
   ┌─event_id─┬────────time─┐
1. │        1 │ 14:30:25.000 │
2. │        3 │ 14:30:25.000 │
   └──────────┴──────────────┘
```

```sql theme={null}
SELECT * FROM tab64 WHERE time = toTime64(52225.123, 3);
```

```text theme={null}
   ┌─event_id─┬────────time─┐
1. │        2 │ 14:30:25.123 │
   └──────────┴──────────────┘
```

Примечание: `toTime64` разбирает числовые литералы как секунды с дробной частью в соответствии с указанной precision, поэтому явно указывайте нужное количество знаков после запятой.

3. Проверка итогового типа:

```sql theme={null}
SELECT CAST('14:30:25.250' AS Time64(3)) AS column, toTypeName(column) AS type;
```

```text theme={null}
   ┌────────column─┬─type──────┐
1. │ 14:30:25.250 │ Time64(3) │
   └───────────────┴───────────┘
```

<div id="addition-with-date">
  ## Сложение с Date
</div>

Значение [Time64](/ru/reference/data-types/time64) можно прибавить к значению [Date](/ru/reference/data-types/date) или [Date32](/ru/reference/data-types/date32), чтобы получить [DateTime64](/ru/reference/data-types/datetime64) с тем же scale, что и у `Time64`:

```sql theme={null}
SET use_legacy_to_time = 0;
SELECT toDate('2024-07-15') + toTime64('14:30:25.123456', 6) AS dt, toTypeName(dt);
```

```text theme={null}
   ┌─────────────────────────dt─┬─toTypeName(dt)─┐
1. │ 2024-07-15 14:30:25.123456 │ DateTime64(6)  │
   └────────────────────────────┴────────────────┘
```

См. [Сложение даты и времени](/ru/reference/operators#date-time-addition), где приведены подробные сведения обо всех поддерживаемых комбинациях и типах результатов.

**См. также**

* [Функции преобразования типов](/ru/reference/functions/regular-functions/type-conversion-functions)
* [Функции для работы с датами и временем](/ru/reference/functions/regular-functions/date-time-functions)
* [Настройка `date_time_input_format`](/ru/reference/settings/formats#date_time_input_format)
* [Настройка `date_time_output_format`](/ru/reference/settings/formats#date_time_output_format)
* [Параметр конфигурации сервера `timezone`](/ru/reference/settings/server-settings/settings#timezone)
* [Настройка `session_timezone`](/ru/reference/settings/session-settings#session_timezone)
* [Операторы для работы с датами и временем](/ru/reference/operators#operators-for-working-with-dates-and-times)
* [Тип данных `Date`](/ru/reference/data-types/date)
* [Тип данных `Time`](/ru/reference/data-types/time)
* [Тип данных `DateTime`](/ru/reference/data-types/datetime)
