Перейти к основному содержанию
Перейти к основному содержанию

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).

Ограничение значений (saturation). Компонента времени суток ограничивается диапазоном [-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;
-- Разбор Time
-- - из строки,
-- - из целого числа, интерпретируемого как количество секунд с 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

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

Значения столбца Time можно фильтровать по строковому значению в предикате WHERE. Оно будет автоматически приведено к типу 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 │
   └───────────┴──────┘

См. также