数仓 SQL 函数对照

首页 / 日期

DATETRUNC 日期截断

DATETRUNC 把日期截断到年、月、周等单位的起点,常用于按月汇总。MaxCompute 写 DATETRUNC 且日期在前,其他引擎多为 DATE_TRUNC 且单位在前,Hive 只能用 trunc 截断到月和年。

各引擎写法 · 迁移注意事项 · 示例

各引擎写法

引擎支持写法说明依据
MaxCompute 支持 DATETRUNC(date, date_part) 返回类型与输入相同。单位支持 yyyy、q、mm、week、isoweek、dd、hh、mi、ss、ff3,week 默认从周一开始,也可以写 week(sunday)。 官方文档
Hologres 需改写 DATE_TRUNC('month', ts) 单位在前,返回 TIMESTAMP 或 TIMESTAMPTZ。 官方文档
StarRocks 需改写 date_trunc('month', datetime) 单位在前且必须是常量。DATE 输入只能截断到 year、quarter、month、week、day。 官方文档
Doris 需改写 DATE_TRUNC(datetime, 'month') 文档列出两种参数顺序,示例都是日期在前。 官方文档
Hive 需改写 trunc(date, 'MM') 函数手册中没有 date_trunc。trunc 只支持 MONTH、MON、MM 和 YEAR、YYYY、YY,返回 string。 官方文档
Spark SQL 需改写 date_trunc('MONTH', ts) date_trunc 从 2.3.0 起提供,单位在前,返回 timestamp。只需要日期时可以用 trunc(date, fmt)。 官方文档
Flink SQL 需改写 FLOOR(timepoint TO MONTH) 内置函数中没有 DATE_TRUNC,用 FLOOR ... TO 向下取整到指定单位。 官方文档

迁移注意事项

示例

取当月第一天

MaxCompute
SELECT DATETRUNC(biz_date, 'mm') FROM orders;
Hologres
SELECT DATE_TRUNC('month', biz_time) FROM orders;
StarRocks
SELECT date_trunc('month', biz_time) FROM orders;
Doris
SELECT DATE_TRUNC(biz_time, 'month') FROM orders;
Hive
SELECT trunc(biz_date, 'MM') FROM orders;
Flink SQL
SELECT FLOOR(biz_time TO MONTH) FROM orders;

同类函数

最后核对日期: