跳到主要内容
最后于 更新

DATE

描述​

DATE 类型存储日期,取值范围是 [0000-01-01, 9999-12-31],但不支持 0000-02-29,默认的输出格式为 'yyyy-MM-dd'。

Doris 使用公历日期规则,其中 0000 年表示 1BC(公元前 1 年),但 0000-02-29 为不支持的特殊边界。

自 4.1.5 版本起,Arrow、Parquet 和 ORC V2 的 DATE 纪元日转换修正了零年前两个月的偏移。旧 Doris 编码文件不能自动识别,包含 0000-01-01 至 0000-02-28 时应按升级指南确认来源并迁移。

DATE 类型可以作为主键、分区列、分桶列。一个 DATE 类型字段在 Doris 中实际占用 4 字节。DATE 在运行中实际按照年、月、日分别存储,因此在 DATE 列上执行 months_add 运算实际比 unix_timestamp 更加高效。

如何将其他类型转换为 DATE,及转换时接受的输入,请见 转换为 DATE。

日期时间类型均不支持直接使用数学运算符进行四则运算,执行数学运算的实质是首先将日期时间类型隐式转换为数字类型,再行运算。如需对时间类型进行加减、取整,请考虑使用 DATE_ADD, DATE_SUB, TIMESTAMPDIFF, DATE_TRUNC 等函数。

DATE 类型不存储时区,即会话变量 time_zone 的变化不影响存储的 DATE 类型的值。

举例​

select cast('2020-01-02' as date);
+----------------------------+
| cast('2020-01-02' as date) |
+----------------------------+
| 2020-01-02 |
+----------------------------+
select cast('0120-02-29' as date);
+----------------------------+
| cast('0120-02-29' as date) |
+----------------------------+
| 0120-02-29 |
+----------------------------+