Help wanted!
The following content of this documentation page has been machine-translated. But unlike other websites, it is not done on the fly. This translated text lives on GitHub repository alongside main ClickHouse codebase and waits for fellow native speakers to make it more human-readable. You can also use the original English version as a reference.
Datetime64
Permite almacenar un instante en el tiempo, que se puede expresar como una fecha de calendario y una hora de un día, con una precisión de subsegundo definida
Tamaño de la marca (precisión): 10-Precision segundo
Sintaxis:
DateTime64(precision, [timezone])
Internamente, almacena datos como un número de ‘ticks’ desde el inicio de la época (1970-01-01 00:00:00 UTC) como Int64. La resolución de tick está determinada por el parámetro precision. Además, el DateTime64
tipo puede almacenar zona horaria que es la misma para toda la columna, que afecta a cómo los valores de la DateTime64
Los valores de tipo se muestran en formato de texto y 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 (o en el conjunto de resultados), sino que se almacena en los metadatos de la columna. Ver detalles en FechaHora.
Ejemplos
1. Creación de una tabla con DateTime64
-tipo de columna e insertar datos en ella:
CREATE TABLE dt
(
`timestamp` DateTime64(3, 'Europe/Moscow'),
`event_id` UInt8
)
ENGINE = TinyLog
INSERT INTO dt Values (1546300800000, 1), ('2019-01-01 00:00:00', 2)
SELECT * FROM dt
┌───────────────timestamp─┬─event_id─┐
│ 2019-01-01 03:00:00.000 │ 1 │
│ 2019-01-01 00:00:00.000 │ 2 │
└─────────────────────────┴──────────┘
- Al insertar datetime como un entero, se trata como una marca de tiempo Unix (UTC) apropiadamente escalada.
1546300800000
(con precisión 3) representa'2019-01-01 00:00:00'
UTC. Sin embargo, comotimestamp
columna tieneEurope/Moscow
(UTC + 3) zona horaria especificada, al emitir como una cadena, el valor se mostrará como'2019-01-01 03:00:00'
- Al insertar el valor de cadena como fecha y hora, se trata como si estuviera en la zona horaria de la columna.
'2019-01-01 00:00:00'
será tratado como estar enEurope/Moscow
zona horaria y se almacena como1546290000000
.
2. Filtrado en DateTime64
valor
SELECT * FROM dt WHERE timestamp = toDateTime64('2019-01-01 00:00:00', 3, 'Europe/Moscow')
┌───────────────timestamp─┬─event_id─┐
│ 2019-01-01 00:00:00.000 │ 2 │
└─────────────────────────┴──────────┘
A diferencia de DateTime
, DateTime64
los valores no se convierten desde String
automática
3. Obtener una zona horaria para un DateTime64
-tipo de valor:
SELECT toDateTime64(now(), 3, 'Europe/Moscow') AS column, toTypeName(column) AS x
┌──────────────────column─┬─x──────────────────────────────┐
│ 2019-10-16 04:12:04.000 │ DateTime64(3, 'Europe/Moscow') │
└─────────────────────────┴────────────────────────────────┘
4. Conversión de zona horaria
SELECT
toDateTime64(timestamp, 3, 'Europe/London') as lon_time,
toDateTime64(timestamp, 3, 'Europe/Moscow') as mos_time
FROM dt
┌───────────────lon_time──┬────────────────mos_time─┐
│ 2019-01-01 00:00:00.000 │ 2019-01-01 03:00:00.000 │
│ 2018-12-31 21:00:00.000 │ 2019-01-01 00:00:00.000 │
└─────────────────────────┴─────────────────────────┘