2020-03-22 09:14:59 +00:00
# DateTime64 {#data_type-datetime64}
2020-03-12 00:13:15 +00:00
2020-03-20 18:20:59 +00:00
Позволяет хранить момент времени, который может быть представлен как календарная дата и время, с заданной с у б -секундной точностью.
2020-03-12 00:13:15 +00:00
Размер тика/точность: 10< sup > -precision< / sup > секунд, где precision - целочисленный параметр типа.
Синтаксис:
2020-03-20 18:20:59 +00:00
``` sql
2020-03-12 00:13:15 +00:00
DateTime64(precision, [timezone])
```
2020-03-20 18:20:59 +00:00
Данные хранятся в виде количества ‘тиков’, прошедших с момента начала эпохи (1970-01-01 00:00:00 UTC), в Int64. Размер тика определяется параметром precision. Дополнительно, тип `DateTime64` позволяет хранить часовой пояс, единый для всей колонки, который влияет на то, как будут отображаться значения типа `DateTime64` в текстовом виде и как будут парситься значения заданные в виде строк (‘ 2020-01-01 05:00:01.000’ ). Часовой пояс не хранится в строках таблицы (выборки), а хранится в метаданных колонки. Подробнее см. [DateTime ](datetime.md ).
2020-03-12 00:13:15 +00:00
2020-03-20 18:20:59 +00:00
## Пример {#primer}
2020-03-12 00:13:15 +00:00
**1.** Создание таблицы с столбцом типа `DateTime64` и вставка данных в неё:
2020-03-20 18:20:59 +00:00
``` sql
2020-03-12 00:13:15 +00:00
CREATE TABLE dt
(
2020-03-20 18:20:59 +00:00
`timestamp` DateTime64(3, 'Europe/Moscow'),
2020-03-12 00:13:15 +00:00
`event_id` UInt8
)
ENGINE = TinyLog
```
2020-03-20 18:20:59 +00:00
``` sql
2020-03-12 00:13:15 +00:00
INSERT INTO dt Values (1546300800000, 1), ('2019-01-01 00:00:00', 2)
```
2020-03-20 18:20:59 +00:00
``` sql
2020-03-12 00:13:15 +00:00
SELECT * FROM dt
```
2020-03-20 18:20:59 +00:00
``` text
2020-03-12 00:13:15 +00:00
┌───────────────timestamp─┬─event_id─┐
│ 2019-01-01 03:00:00.000 │ 1 │
│ 2019-01-01 00:00:00.000 │ 2 │
└─────────────────────────┴──────────┘
```
2020-03-21 04:11:51 +00:00
- При вставке даты-времени как числа (аналогично ‘ 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)
2020-03-12 00:13:15 +00:00
**2.** Фильтрация по значениям даты-времени
2020-03-20 18:20:59 +00:00
``` sql
2020-03-12 00:13:15 +00:00
SELECT * FROM dt WHERE timestamp = toDateTime64('2019-01-01 00:00:00', 3, 'Europe/Moscow')
```
2020-03-20 18:20:59 +00:00
``` text
2020-03-12 00:13:15 +00:00
┌───────────────timestamp─┬─event_id─┐
│ 2019-01-01 00:00:00.000 │ 2 │
└─────────────────────────┴──────────┘
```
2020-03-20 18:20:59 +00:00
2020-03-12 00:13:15 +00:00
В отличие от типа `DateTime` , `DateTime64` не конвертируется из строк автоматически
**3.** Получение часового пояса для значения типа `DateTime64` :
2020-03-20 18:20:59 +00:00
``` sql
2020-03-12 00:13:15 +00:00
SELECT toDateTime64(now(), 3, 'Europe/Moscow') AS column, toTypeName(column) AS x
```
2020-03-20 18:20:59 +00:00
``` text
2020-03-12 00:13:15 +00:00
┌──────────────────column─┬─x──────────────────────────────┐
│ 2019-10-16 04:12:04.000 │ DateTime64(3, 'Europe/Moscow') │
└─────────────────────────┴────────────────────────────────┘
```
**4.** Конвертация часовых поясов
2020-03-20 18:20:59 +00:00
``` sql
SELECT
toDateTime64(timestamp, 3, 'Europe/London') as lon_time,
2020-03-12 00:13:15 +00:00
toDateTime64(timestamp, 3, 'Europe/Moscow') as mos_time
FROM dt
```
2020-03-20 18:20:59 +00:00
``` text
2020-03-12 00:13:15 +00:00
┌───────────────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 │
└─────────────────────────┴─────────────────────────┘
```
2020-03-20 18:20:59 +00:00
## See Also {#see-also}
2020-03-12 00:13:15 +00:00
2020-03-21 04:11:51 +00:00
- [Функции преобразования типов ](../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 )