数仓 SQL 函数对照

首页 / 日期

DATEDIFF 日期差

DATEDIFF 计算两个日期之间相差多少天。多数引擎都是“结束日期在前”,但 MaxCompute 和 Hologres 支持按小时、分钟等单位计算,StarRocks 和 Doris 只按天计算,Flink 需要改用 TIMESTAMPDIFF。

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

各引擎写法

引擎支持写法说明依据
MaxCompute 支持 DATEDIFF(end_date, start_date[, date_part]) 结果为 end_date 减 start_date。不传 date_part 时按天计算并返回 INT,传入时返回 BIGINT。date_part 支持 yyyy、mm、dd、hh、mi、ss、ff3 等。 官方文档
Hologres 支持 DATEDIFF(d1, d2, unit) 需要 V2.0.31~V2.1.0 或 V2.1.13 及以上版本。不足一个单位时返回 0,不允许所有参数都是常量。DATE 相减也可以直接得到天数。 官方文档
StarRocks 支持 DATEDIFF(expr1, expr2) 结果为 expr1 减 expr2,只按天计算,忽略时间部分。需要其他单位时用 date_diff。 官方文档
Doris 支持 DATEDIFF(expr1, expr2) 结果为 expr1 减 expr2,按天计算。 官方文档
Hive 支持 datediff(enddate, startdate) 返回 int,表示从 startdate 到 enddate 的天数。 官方文档
Spark SQL 支持 datediff(endDate, startDate) Spark 1.5.0 起提供。3.4.0 起另有同义的 date_diff。 官方文档
Flink SQL 需改写 TIMESTAMPDIFF(DAY, timepoint1, timepoint2) 内置函数中没有 DATEDIFF。TIMESTAMPDIFF 返回 timepoint1 与 timepoint2 之间带符号的单位数,先写单位,再写开始时间和结束时间。 官方文档

迁移注意事项

示例

计算下单到支付相隔的天数

MaxCompute
SELECT DATEDIFF(pay_time, order_time) FROM orders;
Hologres
SELECT DATEDIFF(pay_time, order_time, 'day') FROM orders;
StarRocks
SELECT DATEDIFF(pay_time, order_time) FROM orders;
Flink SQL
SELECT TIMESTAMPDIFF(DAY, order_time, pay_time) FROM orders;

同类函数

最后核对日期: