# DateTime64 {#data-type-datetime64} Позволяет хранить момент времени, который может быть представлен как календарная дата и время, с заданной суб-секундной точностью. Размер тика/точность: 10-precision секунд, где precision - целочисленный параметр типа. Синтаксис: ``` sql DateTime64(precision, [timezone]) ``` Данные хранятся в виде количества ‘тиков’, прошедших с момента начала эпохи (1970-01-01 00:00:00 UTC), в Int64. Размер тика определяется параметром precision. Дополнительно, тип `DateTime64` позволяет хранить часовой пояс, единый для всей колонки, который влияет на то, как будут отображаться значения типа `DateTime64` в текстовом виде и как будут парситься значения заданные в виде строк (‘2020-01-01 05:00:01.000’). Часовой пояс не хранится в строках таблицы (выборки), а хранится в метаданных колонки. Подробнее см. [DateTime](datetime.md). ## Пример {#primer} **1.** Создание таблицы с столбцом типа `DateTime64` и вставка данных в неё: ``` sql CREATE TABLE dt ( `timestamp` DateTime64(3, 'Europe/Moscow'), `event_id` UInt8 ) ENGINE = TinyLog ``` ``` sql INSERT INTO dt Values (1546300800000, 1), ('2019-01-01 00:00:00', 2) ``` ``` sql SELECT * FROM dt ``` ``` text ┌───────────────timestamp─┬─event_id─┐ │ 2019-01-01 03:00:00.000 │ 1 │ │ 2019-01-01 00:00:00.000 │ 2 │ └─────────────────────────┴──────────┘ ``` - При вставке даты-времени как числа (аналогично ‘Unix timestamp’), время трактуется как UTC. Unix timestamp `1546300800` в часовом поясе `Europe/London (UTC+0)` представляет время `'2019-01-01 00:00:00'`. Однако, столбец `timestamp` имеет тип `DateTime('Europe/Moscow (UTC+3)')`, так что при выводе в виде строки время отобразится как `2019-01-01 03:00:00`. - При вставке даты-времени в виде строки, время трактуется соответственно часовому поясу установленному для колонки. `'2019-01-01 00:00:00'` трактуется как время по Москве (и в базу сохраняется `'2018-12-31 21:00:00'` в виде Unix Timestamp) **2.** Фильтрация по значениям даты-времени ``` sql SELECT * FROM dt WHERE timestamp = toDateTime64('2019-01-01 00:00:00', 3, 'Europe/Moscow') ``` ``` text ┌───────────────timestamp─┬─event_id─┐ │ 2019-01-01 00:00:00.000 │ 2 │ └─────────────────────────┴──────────┘ ``` В отличие от типа `DateTime`, `DateTime64` не конвертируется из строк автоматически **3.** Получение часового пояса для значения типа `DateTime64`: ``` sql SELECT toDateTime64(now(), 3, 'Europe/Moscow') AS column, toTypeName(column) AS x ``` ``` text ┌──────────────────column─┬─x──────────────────────────────┐ │ 2019-10-16 04:12:04.000 │ DateTime64(3, 'Europe/Moscow') │ └─────────────────────────┴────────────────────────────────┘ ``` **4.** Конвертация часовых поясов ``` sql SELECT toDateTime64(timestamp, 3, 'Europe/London') as lon_time, toDateTime64(timestamp, 3, 'Europe/Moscow') as mos_time FROM dt ``` ``` text ┌───────────────lon_time──┬────────────────mos_time─┐ │ 2019-01-01 00:00:00.000 │ 2019-01-01 03:00:00.000 │ │ 2018-12-31 21:00:00.000 │ 2019-01-01 00:00:00.000 │ └─────────────────────────┴─────────────────────────┘ ``` ## See Also {#see-also} - [Функции преобразования типов](../query_language/functions/type_conversion_functions.md) - [Функции для работы с датой и временем](../query_language/functions/date_time_functions.md) - [Функции для работы с массивами](../query_language/functions/array_functions.md) - [Настройка `date_time_input_format`](../operations/settings/settings.md#settings-date_time_input_format) - [Конфигурационный параметр сервера `timezone`](../operations/server_settings/settings.md#server_settings-timezone) - [Операторы для работы с датой и временем](../query_language/operators.md#operators-datetime) - [Тип данных `Date`](date.md) - [Тип данных `DateTime`](datetime.md)