Позволяет хранить момент времени, который можно представить в виде календарной даты и времени суток, с заданной точностью до долей секунды
Размер тика (precision): 10-precision секунды. Допустимый диапазон: [ 0 : 9 ].
Обычно используются значения: 3 (миллисекунды), 6 (микросекунды), 9 (наносекунды).
Синтаксис:
DateTime64(precision, [timezone])
Внутренне хранит данные как количество ‘тиков’ с начала эпохи (1970-01-01 00:00:00 UTC) в виде Int64. Разрешение тиков определяется параметром precision. Кроме того, тип DateTime64 может хранить часовой пояс, общий для всего столбца, что влияет на то, как значения типа DateTime64 отображаются в текстовом формате, и на то, как разбираются значения, заданные в виде строк (‘2020-01-01 05:00:01.000’). Часовой пояс не хранится в строках таблицы (или в наборе результатов), а хранится в метаданных столбца. Подробности см. в DateTime.
Поддерживаемый диапазон значений: [1900-01-01 00:00:00, 2299-12-31 23:59:59.999999999]
Количество цифр после десятичной точки зависит от параметра precision.
Примечание: точность максимального значения равна 8. Если используется максимальная точность в 9 цифр (наносекунды), то максимальное поддерживаемое значение в UTC — 2262-04-11 23:47:16.
- Создание таблицы со столбцом типа
DateTime64 и вставка в неё данных:
CREATE TABLE dt64
(
`timestamp` DateTime64(3, 'Asia/Istanbul'),
`event_id` UInt8
)
ENGINE = MergeTree;
-- Разобрать DateTime
-- - из целого числа, интерпретируемого как количество миллисекунд (из-за точности 3) начиная с 1970-01-01,
-- - из десятичного числа, где часть до десятичной точки — количество секунд, а часть после — точность,
-- - из строки.
INSERT INTO dt64
VALUES
(1546300800123, 1),
(1546300800.123, 2),
('2019-01-01 00:00:00', 3);
SELECT * FROM dt64;
┌───────────────timestamp─┬─event_id─┐
│ 2019-01-01 03:00:00.123 │ 1 │
│ 2019-01-01 03:00:00.123 │ 2 │
│ 2019-01-01 00:00:00.000 │ 3 │
└─────────────────────────┴──────────┘
- При вставке datetime в виде целого числа оно интерпретируется как Unix-временная метка (UTC) с соответствующей точностью.
1546300800000 (с precision 3) соответствует '2019-01-01 00:00:00' UTC. Однако, поскольку для столбца timestamp указан часовой пояс Asia/Istanbul (UTC+3), при выводе в виде строки значение будет показано как '2019-01-01 03:00:00'. При вставке datetime в виде десятичного числа оно обрабатывается аналогично целому числу, за исключением того, что значение до decimal point — это Unix-временная метка вплоть до секунд включительно, а значение после decimal point интерпретируется как precision.
- При вставке строкового значения в datetime оно интерпретируется в часовом поясе столбца.
'2019-01-01 00:00:00' будет интерпретироваться как значение в часовом поясе Asia/Istanbul и сохранено как 1546290000000.
- Фильтрация значений
DateTime64
SELECT * FROM dt64 WHERE timestamp = toDateTime64('2019-01-01 00:00:00', 3, 'Asia/Istanbul');
┌───────────────timestamp─┬─event_id─┐
│ 2019-01-01 00:00:00.000 │ 3 │
└─────────────────────────┴──────────┘
В отличие от DateTime, значения DateTime64 автоматически не преобразуются из String.
SELECT * FROM dt64 WHERE timestamp = toDateTime64(1546300800.123, 3);
┌───────────────timestamp─┬─event_id─┐
│ 2019-01-01 03:00:00.123 │ 1 │
│ 2019-01-01 03:00:00.123 │ 2 │
└─────────────────────────┴──────────┘
В отличие от вставки, функция toDateTime64 будет рассматривать все значения как десятичные, поэтому точность нужно
указывать как число знаков после десятичной точки.
- Получение часового пояса для значения типа
DateTime64:
SELECT toDateTime64(now(), 3, 'Asia/Istanbul') AS column, toTypeName(column) AS x;
┌──────────────────column─┬─x──────────────────────────────┐
│ 2023-06-05 00:09:52.000 │ DateTime64(3, 'Asia/Istanbul') │
└─────────────────────────┴────────────────────────────────┘
- Преобразование часового пояса
SELECT
toDateTime64(timestamp, 3, 'Europe/London') AS lon_time,
toDateTime64(timestamp, 3, 'Asia/Istanbul') AS istanbul_time
FROM dt64;
┌────────────────lon_time─┬───────────istanbul_time─┐
│ 2019-01-01 00:00:00.123 │ 2019-01-01 03:00:00.123 │
│ 2019-01-01 00:00:00.123 │ 2019-01-01 03:00:00.123 │
│ 2018-12-31 21:00:00.000 │ 2019-01-01 00:00:00.000 │
└─────────────────────────┴─────────────────────────┘
См. также
Последнее изменение 10 июня 2026 г.