DATETIME
Описание
Тип DATETIME(p) хранит дату и время, где 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 фактически занимает в Doris 8 байт. Во время выполнения год, месяц, день, час, минута, секунда и микросекунда значения DATETIME хранятся отдельно, поэтому операция months_add над столбцом DATETIME выполняется эффективнее, чем unix_timestamp.
О преобразовании других типов в DATETIME и входных значениях, допустимых при преобразовании, см. Преобразование в DATETIME.
Типы даты и времени не поддерживают прямое использование математических операторов для арифметических операций. При выполнении математических операций типы даты и времени сначала неявно преобразуются в числовые типы, а затем выполняется сама операция. Если требуется сложение, вычитание или округление значений временных типов, используйте такие функции, как DATE_ADD, DATE_SUB, TIMESTAMPDIFF, DATE_TRUNC.
Тип DATETIME не хранит часовой пояс, то есть изменения переменной сеанса time_zone не влияют на сохранённые значения типа DATETIME.
Используйте TIMESTAMP_NS, если требуется наносекундная точность. TIMESTAMP_NS также не учитывает часовой пояс, но поддерживает только диапазон с 1677-09-21 по 2262-04-11.
Примеры
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 |
+---------------------------------------------------+