Permite almacenar un instante temporal, que puede expresarse como una fecha del calendario y una hora del día, con una precisión de subsegundos definida.
Tamaño de tick (precisión): 10-precision segundos. Rango válido: [ 0 : 9 ].
Normalmente se usan 3 (milisegundos), 6 (microsegundos) y 9 (nanosegundos).
Sintaxis:
DateTime64(precision, [timezone])
Internamente, almacena los datos como una cantidad de ‘ticks’ desde el inicio de la epoch (1970-01-01 00:00:00 UTC) como Int64. La resolución de los ticks la determina el parámetro de precisión. Además, el tipo DateTime64 puede almacenar una zona horaria que es la misma para toda la columna, lo que afecta a cómo se muestran en formato de texto los valores del tipo DateTime64 y a cómo se analizan los valores especificados como cadenas (‘2020-01-01 05:00:01.000’). La zona horaria no se almacena en las filas de la tabla (ni en el conjunto de resultados), sino en los metadatos de la columna. Consulte más detalles en DateTime.
Rango de valores admitido: [1900-01-01 00:00:00, 2299-12-31 23:59:59.999999999]
La cantidad de dígitos después del punto decimal depende del parámetro de precisión.
Nota: La precisión del valor máximo es 8. Si se usa la precisión máxima de 9 dígitos (nanosegundos), el valor máximo admitido es 2262-04-11 23:47:16 en UTC.
- Crear una tabla con una columna de tipo
DateTime64 e insertar datos en ella:
CREATE TABLE dt64
(
`timestamp` DateTime64(3, 'Asia/Istanbul'),
`event_id` UInt8
)
ENGINE = MergeTree;
-- Parsear DateTime
-- - desde un entero interpretado como el número de milisegundos (debido a la precisión 3) desde 1970-01-01,
-- - desde un decimal interpretado como el número de segundos antes de la parte decimal, y basado en la precisión después del punto decimal,
-- - desde una cadena de texto.
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 │
└─────────────────────────┴──────────┘
- Al insertar un datetime como entero, se trata como un Unix timestamp (UTC) con la escala adecuada.
1546300800000 (con precisión 3) representa '2019-01-01 00:00:00' UTC. Sin embargo, como la columna timestamp tiene especificada la zona horaria Asia/Istanbul (UTC+3), al mostrarlo como cadena, el valor aparecerá como '2019-01-01 03:00:00'. Insertar un datetime como decimal se trata de forma similar a un entero, salvo que el valor antes del punto decimal es el Unix timestamp hasta los segundos inclusive, y el valor después del punto decimal se interpreta como la precisión.
- Al insertar un valor de cadena como datetime, se trata como si estuviera en la zona horaria de la columna.
'2019-01-01 00:00:00' se interpretará como si estuviera en la zona horaria Asia/Istanbul y se almacenará como 1546290000000.
- Filtrado de valores
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 │
└─────────────────────────┴──────────┘
A diferencia de DateTime, los valores de DateTime64 no se convierten automáticamente a partir de 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 │
└─────────────────────────┴──────────┘
A diferencia de la inserción, la función toDateTime64 tratará todos los valores como la variante decimal, por lo que la precisión debe
indicarse después del punto decimal.
- Obtener una zona horaria de un valor de tipo
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') │
└─────────────────────────┴────────────────────────────────┘
- Conversión de zona horaria
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 │
└─────────────────────────┴─────────────────────────┘
Véase también
Última modificación el 10 de junio de 2026