Skip to main content
Для эффективного управления данными временных рядов необходим полный набор типов даты и времени, и ClickHouse предоставляет именно такой набор. От компактных представлений даты до высокоточных временных меток с точностью до наносекунд — эти типы разработаны так, чтобы обеспечивать баланс между эффективностью хранения и практическими требованиями различных приложений для временных рядов. Независимо от того, работаете ли вы с историческими финансовыми данными, показаниями IoT-датчиков или событиями с датой в будущем, типы даты и времени в ClickHouse обеспечивают гибкость, необходимую для работы с различными сценариями временных данных. Поддерживаемый набор типов позволяет оптимизировать и объем хранилища, и производительность запросов, сохраняя при этом точность, необходимую в вашем сценарии использования.
  • Тип Date будет достаточен в большинстве случаев. Для хранения даты этот тип требует 2 байта и ограничивает диапазон значениями [1970-01-01, 2149-06-06].
  • Date32 охватывает более широкий диапазон дат. Для хранения даты требуется 4 байта, а диапазон ограничен значениями [1900-01-01, 2299-12-31]
  • DateTime хранит значения дата-время с точностью до секунды и диапазоном [1970-01-01 00:00:00, 2106-02-07 06:28:15]. Для каждого значения требуется 4 байта.
  • В случаях, когда требуется более высокая точность, можно использовать DateTime64. Он позволяет хранить время с точностью до наносекунд в диапазоне [1900-01-01 00:00:00, 2299-12-31 23:59:59.99999999]. Для каждого значения требуется 8 байт.
Давайте создадим таблицу, в которой хранятся различные типы дат:
Мы можем использовать функцию now(), чтобы получить текущее время, а now64() — чтобы получить его с указанной точностью, задаваемой первым аргументом.
При этом столбцы будут заполнены значениями времени в соответствии с типом столбца:

Типы Time и Time64

Для случаев, когда нужно хранить значения времени суток без компонентов даты, ClickHouse предоставляет типы Time и Time64, добавленные в версии 25.6. Они удобны для представления повторяющихся расписаний, ежедневных шаблонов и других ситуаций, когда дату и время имеет смысл хранить отдельно.
Для использования Time и Time64 необходимо включить настройку: SET enable_time_time64_type = 1;Эти типы были добавлены в версии 25.6
Тип Time хранит часы, минуты и секунды с точностью до секунды. Внутренне он представлен как знаковое 32-битное целое число и поддерживает диапазон [-999:59:59, 999:59:59], что позволяет использовать значения, превышающие 24 часа. Это может быть полезно при измерении прошедшего времени или выполнении арифметических операций, результат которых выходит за пределы одних суток. Для субсекундной точности Time64 хранит время с настраиваемой дробной частью секунд как знаковое значение Decimal64. Он принимает параметр точности (0-9), который задаёт количество цифр после запятой. Наиболее распространённые значения точности: 3 (миллисекунды), 6 (микросекунды) и 9 (наносекунды). Ни Time, ни Time64 не поддерживают часовые пояса — они представляют собой значения времени суток без привязки к региону. Давайте создадим таблицу со столбцами времени:
Значения времени можно вставлять, используя строковые литералы или числовые значения. Для Time числовые значения интерпретируются как секунды с 00:00:00. Для Time64 числовые значения интерпретируются как секунды с 00:00:00, а дробная часть — в соответствии с точностью столбца:
Временные значения можно удобно фильтровать:

Часовые пояса

Во многих случаях требуется также хранить часовые пояса. Часовой пояс можно указать в качестве последнего аргумента для типов DateTime или DateTime64:
Определив часовой пояс в нашем DDL, теперь мы можем вставлять значения времени в разных часовых поясах:
А теперь посмотрим, что содержится в нашей таблице:
В первой строке мы вставили все значения, используя часовой пояс America/New_York.
  • dt_1 и dt64_1 автоматически преобразуются в Europe/Berlin во время выполнения запроса.
  • Для dt_2 и dt64_2 часовой пояс не был указан, поэтому используется локальный часовой пояс сервера — в данном случае это Europe/London.
Во второй строке мы вставили все значения без указания часового пояса, поэтому использовался локальный часовой пояс сервера. Как и в первой строке, dt_1 и dt64_1 преобразуются в Europe/Berlin, а dt_2 и dt64_2 используют локальный часовой пояс сервера.

Функции даты и времени

ClickHouse также включает набор функций, которые позволяют преобразовывать значения из одного типа данных в другой. Например, можно использовать toDate, чтобы преобразовать значение DateTime в тип Date:
Можно использовать toDateTime64, чтобы преобразовать DateTime в DateTime64:
И мы можем использовать toDateTime, чтобы преобразовать Date или DateTime64 обратно в DateTime:
Последнее изменение 3 июля 2026 г.