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.

Help ClickHouse documentation by editing this page

Datetime64

允许存储时间instant间,可以表示为日历日期和一天中的时间,具有定义的亚秒精度

刻度尺寸(精度):10-精度 秒

语法:

  1. DateTime64(precision, [timezone])

在内部,存储数据作为一些 ‘ticks’ 自纪元开始(1970-01-01 00:00:00UTC)作为Int64. 刻度分辨率由precision参数确定。 此外,该 DateTime64 类型可以存储时区是相同的整个列,影响如何的值 DateTime64 类型值以文本格式显示,以及如何解析指定为字符串的值 (‘2020-01-01 05:00:01.000’). 时区不存储在表的行中(或resultset中),而是存储在列元数据中。 查看详细信息 日期时间.

1. 创建一个表 DateTime64-输入列并将数据插入其中:

  1. CREATE TABLE dt
  2. (
  3. `timestamp` DateTime64(3, 'Europe/Moscow'),
  4. `event_id` UInt8
  5. )
  6. ENGINE = TinyLog
  1. INSERT INTO dt Values (1546300800000, 1), ('2019-01-01 00:00:00', 2)
  1. SELECT * FROM dt
  1. ┌───────────────timestamp─┬─event_id─┐
  2. 2019-01-01 03:00:00.000 1
  3. 2019-01-01 00:00:00.000 2
  4. └─────────────────────────┴──────────┘
  • 将日期时间作为整数插入时,将其视为适当缩放的Unix时间戳(UTC)。 1546300800000 (精度为3)表示 '2019-01-01 00:00:00' UTC. 然而,作为 timestamp 列有 Europe/Moscow (UTC+3)指定的时区,当输出为字符串时,该值将显示为 '2019-01-01 03:00:00'
  • 当插入字符串值作为日期时间时,它被视为处于列时区。 '2019-01-01 00:00:00' 将被视为 Europe/Moscow 时区并存储为 1546290000000.

2. 过滤 DateTime64

  1. SELECT * FROM dt WHERE timestamp = toDateTime64('2019-01-01 00:00:00', 3, 'Europe/Moscow')
  1. ┌───────────────timestamp─┬─event_id─┐
  2. 2019-01-01 00:00:00.000 2
  3. └─────────────────────────┴──────────┘

不像 DateTime, DateTime64 值不转换为 String 自动

3. 获取一个时区 DateTime64-类型值:

  1. SELECT toDateTime64(now(), 3, 'Europe/Moscow') AS column, toTypeName(column) AS x
  1. ┌──────────────────column─┬─x──────────────────────────────┐
  2. 2019-10-16 04:12:04.000 DateTime64(3, 'Europe/Moscow')
  3. └─────────────────────────┴────────────────────────────────┘

4. 时区转换

  1. SELECT
  2. toDateTime64(timestamp, 3, 'Europe/London') as lon_time,
  3. toDateTime64(timestamp, 3, 'Europe/Moscow') as mos_time
  4. FROM dt
  1. ┌───────────────lon_time──┬────────────────mos_time─┐
  2. 2019-01-01 00:00:00.000 2019-01-01 03:00:00.000
  3. 2018-12-31 21:00:00.000 2019-01-01 00:00:00.000
  4. └─────────────────────────┴─────────────────────────┘

另请参阅