-
在大多数情况下,
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 类型
Time 和 Time64 类型,它们于 25.6 版本中引入。这些类型适合表示重复性计划、每日规律,或其他适合将日期与时间 components 分开处理的场景。
使用
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 类型的最后一个参数:
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 使用服务器的本地时区。
日期和时间函数
toDate 将 DateTime 值转换为 Date 类型:
toDateTime64 将 DateTime 转为 DateTime64:
toDateTime 将 Date 或 DateTime64 转回 DateTime: