跳转到主内容
跳转到主内容

Time

数据类型 Time 表示一个由小时、分钟和秒组成的时间。 它独立于任何日历日期,适用于不需要日、月、年部分的取值。

语法:

Time

文本表示的范围:[-999:59:59, 999:59:59]。

精度:1 秒。

实现细节

表示与性能。 数据类型 Time 在内部存储为一个带符号的 32 位整数,用于编码秒数。 TimeDateTime 类型的值具有相同的字节大小,因此性能相当。

规范化。 在将字符串解析为 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. │        1 │ 14:30:25 │
2. │        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. │        1 │ 14:30:25 │
2. │        2 │ 14:30:25 │
   └──────────┴───────────┘

可以在 WHERE 谓词中使用字符串值来过滤 Time 列的值,它会被自动转换为 Time

SELECT * FROM tab WHERE time = '14:30:25'
   ┌─event_id─┬──────time─┐
1. │        1 │ 14:30:25 │
2. │        2 │ 14:30:25 │
   └──────────┴───────────┘

3. 查看结果类型:

SELECT CAST('14:30:25' AS Time) AS column, toTypeName(column) AS type
   ┌────column─┬─type─┐
1. │ 14:30:25 │ Time │
   └───────────┴──────┘

与 Date 相加

Time 值加到 DateDate32 值上,可得到 DateTimeDateTime64

SET use_legacy_to_time = 0;
SELECT toDate('2024-07-15') + toTime('14:30:25') as datetime;
   ┌────────────datetime─┐
1. │ 2024-07-15 14:30:25 │
   └─────────────────────┘

有关所有受支持的组合及结果类型的详细信息,请参见日期和时间加法

另请参阅