数仓 SQL 函数对照

首页 / 日期

DATE_ADD 日期加减

DATE_ADD 给日期加上若干天。函数名相同,但 MaxCompute、Hive 和 Spark 直接传天数,StarRocks 和 Doris 要写 INTERVAL;返回类型也不同,MaxCompute 返回 DATE 并丢掉时间部分。

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

各引擎写法

引擎支持写法说明依据
MaxCompute 支持 DATE_ADD(startdate, delta) 按天加减,delta 为负数时表示减。返回 DATE,输入的时间部分会被丢弃。需要按月、小时等单位加减时用 DATEADD。 官方文档
Hologres 需改写 DATEADD(d, num, 'day') 文档中没有 DATE_ADD,可以用 DATEADD 或 d + interval。DATEADD 需要 V2.0.31~V2.1.0 或 V2.1.13 及以上版本。 官方文档
StarRocks 支持 DATE_ADD(date, INTERVAL n DAY) 文档只列出 INTERVAL 写法。返回 DATETIME,DATE 输入也会转成 DATETIME。结果日期不存在时返回 NULL。 官方文档
Doris 支持 DATE_ADD(date, INTERVAL n DAY) 别名有 days_add 和 adddate。单位支持 YEAR、MONTH、DAY、HOUR、MINUTE、SECOND。 官方文档
Hive 支持 date_add(startdate, days) Hive 2.1.0 之前返回 string,之后返回 date。 官方文档
Spark SQL 支持 date_add(start_date, num_days) Spark 1.5.0 起提供。3.4.0 起另有同义的 dateadd。 官方文档
Flink SQL 需改写 TIMESTAMPADD(DAY, n, timepoint) 内置函数中没有 DATE_ADD,改用 TIMESTAMPADD。 官方文档

迁移注意事项

示例

取次日日期

MaxCompute
SELECT DATE_ADD(biz_date, 1) FROM orders;
Hologres
SELECT DATEADD(biz_date, 1, 'day') FROM orders;
StarRocks
SELECT DATE_ADD(biz_date, INTERVAL 1 DAY) FROM orders;
Spark SQL
SELECT date_add(biz_date, 1) FROM orders;
Flink SQL
SELECT TIMESTAMPADD(DAY, 1, biz_time) FROM orders;

同类函数

最后核对日期: