如何将SQL的DATEADD日期计算脚本迁移为Spark SQL兼容格式
迁移DATEADD+EOMONTH到Spark SQL的兼容写法
原SQL语句DATEADD(DAY, 1, EOMONTH(CURRENT_TIMESTAMP, -2))的核心逻辑是:获取当前时间所在月份往前推2个月的月末日期,再加1天,最终得到「往前推2个月的下一个月第一天」(等价于「当前月份往前推1个月的第一天」)。
由于Spark SQL没有EOMONTH函数,以下是两种等价的兼容写法:
写法一:贴近原逻辑直译
用last_day替代EOMONTH获取月末,结合add_months实现月份偏移,再用date_add加1天:
date_add(last_day(add_months(current_timestamp(), -2)), 1)
写法二:更简洁的等价逻辑
利用trunc函数直接截取「往前推1个月的月份第一天」,逻辑上和原SQL完全一致:
trunc(add_months(current_timestamp(), -1), 'MM')
验证示例
假设当前时间为2024-05-15:
- 原SQL输出:
2024-04-01 - 两种Spark SQL写法的输出均为
2024-04-01,结果完全匹配。
内容的提问来源于stack exchange,提问作者Developer Rajinikanth
相关产品推荐
相关产品推荐

