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

Time64

Тип данных Time64 представляет собой время суток с долями секунд. Он не содержит календарных компонентов даты (день, месяц, год). Параметр precision определяет количество дробных цифр и, следовательно, размер тика.

Размер тика (точность): 10-precision секунд. Допустимый диапазон: 0..9. Общие значения: 3 (миллисекунды), 6 (микросекунды) и 9 (наносекунды).

Синтаксис:

Time64(precision)

Внутри Time64 хранится_signed 64-битное десятичное (Decimal64) число долей секунд. Разрешение тика определяется параметром precision. Часовые пояса не поддерживаются: указание часового пояса при использовании Time64 приведёт к ошибке.

В отличие от DateTime64, Time64 не хранит компонент даты. Смотрите также Time.

Диапазон текстового представления: [-999:59:59.000, 999:59:59.999] для precision = 3. В общем случае минимум составляет -999:59:59, а максимум составляет 999:59:59 с до precision дробными цифрами (для precision = 9 минимум составляет -999:59:59.999999999).

Implementation details

Representation. Подписанное значение Decimal64, подсчитывающее доли секунды с precision дробными цифрами.

Normalization. При анализе строк в Time64 временные компоненты нормализуются и не валидируются. Например, 25:70:70 интерпретируется как 26:11:10.

Negative values. Поддерживаются и сохраняются начальные знаки минус. Отрицательные значения обычно возникают в результате арифметических операций над значениями Time64. Для Time64 отрицательные входные данные сохраняются как текстовые (например, '-01:02:03.123') так и числовые (например, -3723.123).

Saturation. Компонент времени суток ограничен диапазоном [-999:59:59.xxx, 999:59:59.xxx] при преобразовании в компоненты или сериализации в текст. Хранимое числовое значение может превышать этот диапазон; однако любая извлечение компонентов (часы, минуты, секунды) и текстовое представление используют насыщенное значение.

Time zones. Time64 не поддерживает часовые пояса. Указание часового пояса при создании типа или значения Time64 приводит к ошибке. Аналогичным образом, попытки применить или изменить часовой пояс для колонок Time64 не поддерживаются и приводят к ошибке.

Examples

  1. Создание таблицы с колонкой типа 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. │        1 │ 14:30:25.000 │
2. │        2 │ 14:30:25.123 │
3. │        3 │ 14:30:25.000 │
   └──────────┴──────────────┘
  1. Фильтрация по значениям Time64
SELECT * FROM tab64 WHERE time = toTime64('14:30:25', 3);
   ┌─event_id─┬────────time─┐
1. │        1 │ 14:30:25.000 │
2. │        3 │ 14:30:25.000 │
   └──────────┴──────────────┘
SELECT * FROM tab64 WHERE time = toTime64(52225.123, 3);
   ┌─event_id─┬────────time─┐
1. │        2 │ 14:30:25.123 │
   └──────────┴──────────────┘

Примечание: toTime64 анализирует числовые литералы как секунды с дробной частью в соответствии с заданной точностью, поэтому указывайте намеренные дробные цифры явно.

  1. Проверка результирующего типа:
SELECT CAST('14:30:25.250' AS Time64(3)) AS column, toTypeName(column) AS type;
   ┌────────column─┬─type──────┐
1. │ 14:30:25.250 │ Time64(3) │
   └───────────────┴───────────┘

Смотрите также