如何在Spark SQL中从指定日期获取三个月前第一天的日期
Spark SQL 实现指定日期转三个月前首日
直接使用Spark SQL内置的两个日期函数组合即可实现需求,示例代码如下:
-- 以入参日期'2021-08-21'为例 SELECT date_trunc('month', add_months('2021-08-21', -3)) AS target_date;
执行后返回结果为 2021-05-01,完全匹配要求。
函数逻辑说明
add_months(日期, 偏移量):用于对日期做月份维度的偏移,偏移量为负数表示向前推对应月份,这里传-3就会把输入日期往前推3个月,add_months('2021-08-21', -3)执行后得到中间结果2021-05-21date_trunc('month', 日期):用于将日期截断到当月第一天,对上一步得到的2021-05-21执行该函数后就得到目标结果2021-05-01
注意事项
如果你的日期存储为字符串格式,建议先通过to_date()函数转换为日期类型再处理,避免格式异常:
-- dt为存储日期的字符串字段,格式为yyyy-MM-dd SELECT date_trunc('month', add_months(to_date(dt), -3)) AS target_date FROM 你的表名;
以上写法兼容Spark 2.3及所有更高版本,date_trunc的第一个参数也可以替换为mm、mon,最终效果一致。
内容的提问来源于stack exchange,提问作者clickwerse
相关产品推荐
相关产品推荐

