ClickHouse/docs/ru/data_types/datetime.md
Ivan Blinkov 2e1f6bc56d
[experimental] add "es" docs language as machine translated draft (#9787)
* replace exit with assert in test_single_page

* improve save_raw_single_page docs option

* More grammar fixes

* "Built from" link in new tab

* fix mistype

* Example of include in docs

* add anchor to meeting form

* Draft of translation helper

* WIP on translation helper

* Replace some fa docs content with machine translation

* add normalize-en-markdown.sh

* normalize some en markdown

* normalize some en markdown

* admonition support

* normalize

* normalize

* normalize

* support wide tables

* normalize

* normalize

* normalize

* normalize

* normalize

* normalize

* normalize

* normalize

* normalize

* normalize

* normalize

* normalize

* normalize

* lightly edited machine translation of introdpection.md

* lightly edited machhine translation of lazy.md

* WIP on translation utils

* Normalize ru docs

* Normalize other languages

* some fixes

* WIP on normalize/translate tools

* add requirements.txt

* [experimental] add es docs language as machine translated draft

* remove duplicate script

* Back to wider tab-stop (narrow renders not so well)
2020-03-21 07:11:51 +03:00

7.7 KiB
Raw Blame History

DateTime

Позволяет хранить момент времени, который может быть представлен как календарная дата и время.

Синтаксис:

DateTime([timezone])

Диапазон значений: [1970-01-01 00:00:00, 2105-12-31 23:59:59].

Точность: 1 секунда.

Использование

Момент времени сохраняется как Unix timestamp, независимо от часового пояса и переходов на летнее/зимнее время. Дополнительно, тип DateTime позволяет хранить часовой пояс, единый для всей колонки, который влияет на то, как будут отображаться значения типа DateTime в текстовом виде и как будут парситься значения заданные в виде строк (2020-01-01 05:00:01). Часовой пояс не хранится в строках таблицы (выборки), а хранится в метаданных колонки. Список поддерживаемых временных зон можно найти в IANA Time Zone Database. Пакет tzdata, содержащий базу данных часовых поясов IANA, должен быть установлен в системе. Используйте команду timedatectl list-timezones для получения списка часовых поясов, известных локальной системе.

Часовой пояс для столбца типа DateTime можно в явном виде установить при создании таблицы. Если часовой пояс не установлен, то ClickHouse использует значение параметра timezone, установленное в конфигурации сервера или в настройках операционной системы на момент запуска сервера.

Консольный клиент ClickHouse по умолчанию использует часовой пояс сервера, если для значения DateTime часовой пояс не был задан в явном виде при инициализации типа данных. Чтобы использовать часовой пояс клиента, запустите clickhouse-client с параметром --use_client_time_zone.

ClickHouse отображает значения типа DateTime в формате 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

Оригинальная статья