数据类型 Time 表示由小时、分钟和秒组成的时间。
它独立于任何日历日期,适用于不需要日、月、年部分的值。
语法:
Time文本表示范围:[-999:59:59, 999:59:59]。
分辨率:1 秒。
实现细节
表示形式与性能。
数据类型 Time 在内部存储为一个有符号的 32 位整数,用于编码秒数。
Time 和 DateTime 类型的值占用相同的字节数,因此性能相近。
归一化。
将字符串解析为 Time 时,会对时间各组成部分进行归一化,但不会校验其有效性。
例如,25:70:70 会被解释为 26:11:10。
负值。
支持并保留前导负号。
负值通常来自对 Time 值执行算术运算。
对于 Time 类型,无论是文本输入 (例如 '-01:02:03') 还是数值输入 (例如 -3723) ,负值都会被保留。
饱和。
时刻部分会被限制在 [-999:59:59, 999:59:59] 范围内。
小时数超过 999 (或低于 -999) 的值,在以文本形式表示以及往返转换时,都会显示为 999:59:59 (或 -999:59:59) 。
时区。
Time 不支持时区,也就是说,Time 值会在不带区域上下文的情况下进行解释。
为 Time 指定时区作为类型参数,或在创建值时指定时区,都会抛出错误。
同样,尝试对 Time 列应用或更改时区也不受支持,并会导致错误。
Time 值不会在不提示的情况下按不同时区重新解释。
示例
1. 创建一个带有 Time 类型列的表,并向其中插入数据:
CREATE TABLE tab
(
`event_id` UInt8,
`time` Time
)
ENGINE = TinyLog;-- Parse Time
-- - from string,
-- - from integer interpreted as number of seconds since 00:00:00.
INSERT INTO tab VALUES (1, '14:30:25'), (2, 52225);
SELECT * FROM tab ORDER BY event_id;┌─event_id─┬──────time─┐
│ 1 │ 14:30:25 │
│ 2 │ 14:30:25 │
└──────────┴───────────┘2. 按 Time 值过滤
SET use_legacy_to_time = 0;
SELECT * FROM tab WHERE time = toTime('14:30:25')┌─event_id─┬──────time─┐
│ 1 │ 14:30:25 │
│ 2 │ 14:30:25 │
└──────────┴───────────┘Time 列的值可在 WHERE 谓词中通过字符串值进行过滤。该字符串会自动转换为 Time:
SELECT * FROM tab WHERE time = '14:30:25'┌─event_id─┬──────time─┐
│ 1 │ 14:30:25 │
│ 2 │ 14:30:25 │
└──────────┴───────────┘3. 查看结果类型:
SELECT CAST('14:30:25' AS Time) AS column, toTypeName(column) AS type┌────column─┬─type─┐
│ 14:30:25 │ Time │
└───────────┴──────┘Date 加法
可以将 Time 值与 Date 或 Date32 值相加,得到 DateTime 或 DateTime64:
SET use_legacy_to_time = 0;
SELECT toDate('2024-07-15') + toTime('14:30:25') as datetime;┌────────────datetime─┐
│ 2024-07-15 14:30:25 │
└─────────────────────┘有关所有受支持的组合及结果类型的详细信息,请参阅日期和时间加法。