DateTime
Позволяет хранить момент времени, который может быть представлен как календарная дата и время.
Синтаксис:
DateTime([timezone])
Диапазон значений: [1970-01-01 00:00:00, 2106-02-07 06:28:15].
Точность: 1 секунда.
Использование
Момент времени сохраняется как Unix timestamp, независимо от часового пояса и переходов на летнее/зимнее время. Дополнительно, тип DateTime
позволяет хранить часовой пояс, единый для всей колонки, который влияет на то, как будут отображаться значения типа DateTime
в текстовом виде и как будут парситься значения заданные в виде строк (‘2020-01-01 05:00:01’). Часовой пояс не хранится в строках таблицы (выборки), а хранится в метаданных колонки.
Список поддерживаемых часовых поясов можно найти в IANA Time Zone Database или получить из базы данных, выполнив запрос SELECT * FROM system.time_zones
. Также список есть в Википедии.
Часовой пояс для столбца типа DateTime
можно в явном виде установить при создании таблицы. Если часовой пояс не установлен, то ClickHouse использует значение параметра timezone, установленное в конфигурации сервера или в настройках операционной системы на момент запуска сервера.
Консольный клиент ClickHouse по умолчанию использует часовой пояс сервера, если для значения DateTime
часовой пояс не был задан в явном виде при инициализации типа данных. Чтобы использовать часовой пояс клиента, запустите clickhouse-client с параметром --use_client_time_zone
.
ClickHouse отображает значения в зависимости от значения параметра date_time_output_format. Текстовый формат по умолчанию YYYY-MM-DD hh:mm:ss
. Кроме того, вы можете поменять отображение с помощью функции formatDateTime.
При вставке данных в ClickHouse, можно использовать различные форматы даты и времени в зависимости от значения настройки date_time_input_format.
Примеры
1. Создание таблицы с столбцом типа DateTime
и вставка данных в неё:
CREATE TABLE dt
(
`timestamp` DateTime('Europe/Moscow'),
`event_id` UInt8
)
ENGINE = TinyLog;
INSERT INTO dt Values (1546300800, 1), ('2019-01-01 00:00:00', 2);
SELECT * FROM dt;
┌───────────timestamp─┬─event_id─┐
│ 2019-01-01 03:00:00 │ 1 │
│ 2019-01-01 00:00:00 │ 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'
трактуется как время по Москве (и в базу сохраняется1546290000
)
2. Фильтрация по значениям даты-времени
SELECT * FROM dt WHERE timestamp = toDateTime('2019-01-01 00:00:00', 'Europe/Moscow')
┌───────────timestamp─┬─event_id─┐
│ 2019-01-01 00:00:00 │ 2 │
└─────────────────────┴──────────┘
Фильтровать по колонке типа DateTime
можно, указывая строковое значение в фильтре WHERE
. Конвертация будет выполнена автоматически:
SELECT * FROM dt WHERE timestamp = '2019-01-01 00:00:00'
┌───────────timestamp─┬─event_id─┐
│ 2019-01-01 03:00:00 │ 1 │
└─────────────────────┴──────────┘
3. Получение часового пояса для колонки типа DateTime
:
SELECT toDateTime(now(), 'Europe/Moscow') AS column, toTypeName(column) AS x
┌──────────────column─┬─x─────────────────────────┐
│ 2019-10-16 04:12:04 │ DateTime('Europe/Moscow') │
└─────────────────────┴───────────────────────────┘
4. Конвертация часовых поясов
SELECT
toDateTime(timestamp, 'Europe/London') as lon_time,
toDateTime(timestamp, 'Europe/Moscow') as mos_time
FROM dt
┌───────────lon_time──┬────────────mos_time─┐
│ 2019-01-01 00:00:00 │ 2019-01-01 03:00:00 │
│ 2018-12-31 21:00:00 │ 2019-01-01 00:00:00 │
└─────────────────────┴─────────────────────┘
See Also
- Функции преобразования типов
- Функции для работы с датой и временем
- Функции для работы с массивами
- Настройка
date_time_input_format
- Настройка
date_time_output_format
- Конфигурационный параметр сервера
timezone
- Параметр
session_timezone
- Операторы для работы с датой и временем
- Тип данных
Date
- Тип данных
DateTime64