You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SparkSQL获取当月最后一天时如何保留Timestamp的时间部分?

解决方案

要在获取当月最后一天的同时保留Timestamp的时间部分,核心是将last_day()得到的当月最后一天日期,与原始Timestamp的时分秒部分组合起来,以下是两种可行的实现方式:

方法1:拼接日期与时间字符串后转Timestamp

利用date_format()提取原始时间的时分秒部分,与last_day()返回的日期拼接后转成Timestamp:

spark.sql("SELECT DISTINCT max(col1) AS col1, \
              col2, col3,\
              max(col4) AS col4,\
              to_timestamp(concat(last_day(col5_date), ' ', date_format(col5_date, 'HH:mm:ss'))) as col5_date\
              FROM table \
              GROUP BY col1, col2, col3, col4, col5").registerTempTable("table1")

方法2:通过时间戳差值计算

先计算原始Timestamp当天已流逝的秒数,再将该秒数加到当月最后一天的起始时间上:

spark.sql("SELECT DISTINCT max(col1) AS col1, \
              col2, col3,\
              max(col4) AS col4,\
              timestamp_add(to_timestamp(last_day(col5_date)), unix_timestamp(col5_date) - unix_timestamp(date_trunc('day', col5_date))) as col5_date\
              FROM table \
              GROUP BY col1, col2, col3, col4, col5").registerTempTable("table1")

补充说明

两种方法都能保留原始Timestamp的时分秒信息,仅将日期部分替换为当月最后一天。另外注意你的GROUP BY子句中包含col5,需确保该分组逻辑符合业务需求。

内容的提问来源于stack exchange,提问作者Wendy Velasquez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 04:12:20