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

DATETIME

Описание​

Тип DATETIME(p) хранит дату и время, где p задаёт точность в диапазоне [0, 6] со значением по умолчанию 0. Таким образом, DATETIME эквивалентен DATETIME(0).

Диапазон значений составляет [0000-01-01 00:00:00.000..., 9999-12-31 23:59:59.999...], а формат вывода по умолчанию — 'yyyy-MM-dd HH:mm:ss.SSS...'. После десятичной точки указывается p цифр. Например, диапазон значений DATETIME(6) составляет [0000-01-01 00:00:00.000000, 9999-12-31 23:59:59.999999].

Doris использует григорианский календарь. Датам григорианского календаря взаимно однозначно соответствуют даты в Doris, где 0000 обозначает 1 год до н. э. (BCE 1). Для любой даты диапазон времени всегда составляет ['00:00:00.000...', '23:59:59.999...'], причём значения времени не повторяются, то есть секунды координации отсутствуют.

Тип DATETIME можно использовать для первичного ключа, столбца партиционирования или столбца бакетирования. Поле типа DATETIME фактически занимает 8 байт в Doris. Во время выполнения DATETIME хранится в виде отдельных компонентов: года, месяца, дня, часа, минуты, секунды и микросекунды. Поэтому выполнение операции months_add над столбцом DATETIME эффективнее, чем выполнение unix_timestamp.

О преобразовании других типов в DATETIME и допустимых входных значениях см. Приведение к DATETIME.

Типы даты и времени не поддерживают прямое применение математических операторов для арифметических операций. При выполнении таких операций типы даты и времени сначала неявно преобразуются в числовые типы, после чего выполняется вычисление. Если требуется сложить, вычесть или округлить значения временных типов, можно использовать такие функции, как DATE_ADD, DATE_SUB, TIMESTAMPDIFF, DATE_TRUNC.

Тип DATETIME не хранит часовой пояс, то есть изменение переменной сеанса time_zone не влияет на сохранённые значения типа DATETIME.

Примеры​

select cast('2020-01-02' as datetime);
+--------------------------------+
| cast('2020-01-02' as datetime) |
+--------------------------------+
| 2020-01-02 00:00:00 |
+--------------------------------+
select cast('2020-01-02' as datetime(6));
+-----------------------------------+
| cast('2020-01-02' as datetime(6)) |
+-----------------------------------+
| 2020-01-02 00:00:00.000000 |
+-----------------------------------+
select cast('0000-12-31 22:21:20.123456' as datetime(4));
+---------------------------------------------------+
| cast('0000-12-31 22:21:20.123456' as datetime(4)) |
+---------------------------------------------------+
| 0000-12-31 22:21:20.1235 |
+---------------------------------------------------+