Skip to main content
Disponer de un conjunto completo de tipos de fecha y hora es esencial para gestionar eficazmente datos de series temporales, y ClickHouse ofrece precisamente eso. Desde representaciones compactas de fechas hasta marcas de tiempo de alta precisión con exactitud de nanosegundos, estos tipos están diseñados para equilibrar la eficiencia de almacenamiento con los requisitos prácticos de distintas aplicaciones de series temporales. Tanto si trabajas con datos financieros históricos, lecturas de sensores de IoT o eventos fechados en el futuro, los tipos de fecha y hora de ClickHouse ofrecen la flexibilidad necesaria para manejar diversos escenarios de datos temporales. La variedad de tipos admitidos te permite optimizar tanto el espacio de almacenamiento como el rendimiento de las consultas, manteniendo al mismo tiempo la precisión que exige tu caso de uso.
  • El tipo Date debería ser suficiente en la mayoría de los casos. Este tipo requiere 2 bytes para almacenar una fecha y limita el rango a [1970-01-01, 2149-06-06].
  • Date32 cubre un rango de fechas más amplio. Requiere 4 bytes para almacenar una fecha y limita el rango a [1900-01-01, 2299-12-31]
  • DateTime almacena valores de fecha y hora con precisión de segundos y un rango de [1970-01-01 00:00:00, 2106-02-07 06:28:15] Requiere 4 bytes por valor.
  • Para los casos en los que se necesita más precisión, se puede usar DateTime64. Esto permite almacenar tiempo con una precisión de hasta nanosegundos, con un rango de [1900-01-01 00:00:00, 2299-12-31 23:59:59.99999999]. Requiere 8 bytes por valor.
Vamos a crear una tabla que almacene varios tipos de fecha:
Podemos usar la función now() para devolver la hora actual y now64() para obtenerla con la precisión especificada en el primer argumento.
Esto rellenará nuestras columnas con valores de tiempo según el tipo de columna:

Tipos Time y Time64

Para los casos en los que necesite almacenar valores de hora sin componentes de fecha, ClickHouse proporciona los tipos Time y Time64, introducidos en la versión 25.6. Son útiles para representar horarios recurrentes, patrones diarios o situaciones en las que tiene sentido separar los componentes de fecha y hora.
El uso de Time y Time64 requiere habilitar la configuración: SET enable_time_time64_type = 1;Estos tipos se introdujeron en la versión 25.6
El tipo Time almacena horas, minutos y segundos con precisión de segundos. Se almacena internamente como un entero con signo de 32 bits y admite un rango de [-999:59:59, 999:59:59], lo que permite valores que superan las 24 horas. Esto puede ser útil para registrar tiempo transcurrido o realizar operaciones aritméticas que den como resultado valores fuera de un único día. Para la precisión de fracciones de segundo, Time64 almacena la hora con segundos fraccionarios configurables como un valor Decimal64 con signo. Acepta un parámetro de precisión (0-9) para definir el número de dígitos fraccionarios. Los valores de precisión más habituales son 3 (milisegundos), 6 (microsegundos) y 9 (nanosegundos). Ni Time ni Time64 admiten zonas horarias; representan valores puros de hora sin contexto regional. Vamos a crear una tabla con columnas de tiempo:
Podemos insertar valores de tiempo mediante literales de cadena o valores numéricos. Para Time, los valores numéricos se interpretan como segundos desde 00:00:00. Para Time64, los valores numéricos se interpretan como segundos desde 00:00:00, y la parte fraccionaria se interpreta según la precisión de la columna:
Los valores temporales se pueden filtrar de forma natural:

Zonas horarias

Muchos casos de uso también requieren almacenar las zonas horarias. Podemos establecer la zona horaria como el último argumento de los tipos DateTime o DateTime64:
Una vez definida una zona horaria en nuestro DDL, ahora podemos insertar valores de tiempo usando distintas zonas horarias:
Y ahora veamos qué contiene nuestra tabla:
En la primera fila, insertamos todos los valores usando la zona horaria America/New_York.
  • dt_1 y dt64_1 se convierten automáticamente a Europe/Berlin en tiempo de consulta.
  • dt_2 y dt64_2 no tenían una zona horaria especificada, por lo que usan la zona horaria local del servidor, que en este caso es Europe/London.
En la segunda fila, insertamos todos los valores sin especificar una zona horaria, por lo que se usó la zona horaria local del servidor. Como en la primera fila, dt_1 y dt64_1 se convierten a Europe/Berlin, mientras que dt_2 y dt64_2 usan la zona horaria local del servidor.

Funciones de fecha y hora

ClickHouse también incluye un conjunto de funciones que permite convertir entre distintos tipos de datos. Por ejemplo, podemos usar toDate para convertir un valor DateTime en el tipo Date:
Podemos usar toDateTime64 para convertir DateTime a DateTime64:
Y podemos usar toDateTime para convertir Date o DateTime64 de nuevo a DateTime:
Última modificación el 3 de julio de 2026