数据类型 Time64 表示带小数秒的时刻。
它不包含任何日历日期部分 (日、月、年) 。
precision 参数定义小数位数,因此也决定了时间粒度。
时间粒度 (precision) :10-precision 秒。有效范围:0..9。常见取值为 3 (毫秒) 、6 (微秒) 和 9 (纳秒) 。
语法:
Time64(precision)在内部,Time64 将小数秒存储为有符号的 64 位十进制数 (Decimal64) 。
tick 分辨率由 precision 参数决定。
不支持时区:如果为 Time64 指定时区,将抛出错误。
与 DateTime64 不同,Time64 不存储日期部分。
另请参见 Time。
文本表示范围:当 precision = 3 时,为 [-999:59:59.000, 999:59:59.999]。一般情况下,最小值为 -999:59:59,最大值为 999:59:59,小数部分最多可有 precision 位 (当 precision = 9 时,最小值为 -999:59:59.999999999) 。
实现细节
表示。
使用带符号的 Decimal64 值表示,按 precision 个小数位计数秒的小数部分。
归一化。
将字符串解析为 Time64 时,时间各组件会被归一化,但不会校验其有效性。
例如,25:70:70 会被解释为 26:11:10。
负值。
支持并保留前导负号。
负值通常来自对 Time64 值进行算术运算。
对于 Time64,无论是文本输入 (例如 '-01:02:03.123') 还是数值输入 (例如 -3723.123) ,都会保留负值。
饱和处理。 在转换为各组件或序列化为文本时,时刻部分会被限制在 [-999:59:59.xxx, 999:59:59.xxx] 范围内。 存储的数值可能超出此范围;但提取任何组件 (小时、分钟、秒) 以及转换为文本表示时,都会使用限制后的值。
时区。
Time64 不支持时区。
创建 Time64 类型或值时,如果指定时区,会抛出错误。
同样,尝试对 Time64 列应用或更改时区也不受支持,并会导致错误。
示例
- 创建一个带有
Time64类型列的表,并向其中插入数据:
CREATE TABLE tab64
(
`event_id` UInt8,
`time` Time64(3)
)
ENGINE = TinyLog;-- Parse Time64
-- - from string,
-- - from a number of seconds since 00:00:00 (fractional part according to precision).
INSERT INTO tab64 VALUES (1, '14:30:25'), (2, 52225.123), (3, '14:30:25');
SELECT * FROM tab64 ORDER BY event_id;┌─event_id─┬────────time─┐
│ 1 │ 14:30:25.000 │
│ 2 │ 14:30:25.123 │
│ 3 │ 14:30:25.000 │
└──────────┴──────────────┘- 过滤
Time64值
SELECT * FROM tab64 WHERE time = toTime64('14:30:25', 3);┌─event_id─┬────────time─┐
│ 1 │ 14:30:25.000 │
│ 3 │ 14:30:25.000 │
└──────────┴──────────────┘SELECT * FROM tab64 WHERE time = toTime64(52225.123, 3);┌─event_id─┬────────time─┐
│ 2 │ 14:30:25.123 │
└──────────┴──────────────┘注意:toTime64 会根据指定的精度,将数值字面量按带小数部分的秒数进行解析,因此请明确写出所需的小数位数。
- 检查结果类型:
SELECT CAST('14:30:25.250' AS Time64(3)) AS column, toTypeName(column) AS type;┌────────column─┬─type──────┐
│ 14:30:25.250 │ Time64(3) │
└───────────────┴───────────┘与 Date 相加
可以将 Time64 值与 Date 或 Date32 值相加,得到一个与 Time64 具有相同标度的 DateTime64:
SET use_legacy_to_time = 0;
SELECT toDate('2024-07-15') + toTime64('14:30:25.123456', 6) AS dt, toTypeName(dt);┌─────────────────────────dt─┬─toTypeName(dt)─┐
│ 2024-07-15 14:30:25.123456 │ DateTime64(6) │
└────────────────────────────┴────────────────┘有关所有支持的组合及结果类型的详细信息,请参阅日期和时间加法。
另请参阅