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

Spark SQL如何给日期列减1秒并计算上月末23:59:59时间值

错误点说明

你提供的代码存在以下几处问题:

  • 在Spark SQL语句中直接使用col(cr_date)是错误用法,SQL语法内直接引用字段名即可,不需要用DataFrame API的col()方法
  • 解析cr_date时没有指定输入格式dd.MM.yyyy,会导致日期解析失败返回空值
  • 你需要减1秒,原代码写的minus(60)是减1分钟,参数错误
  • 日期输出格式和你预期的yyyyMMdd'T'HH:mm:ss不匹配
  • 往前推2个月最后一天拼接23:59:59的逻辑没有做格式输出适配

可行实现代码

val df2 = spark.sql("""
select 
  id,
  cr_date,
  -- 计算cr_date减1秒,按要求格式化输出
  date_format(
    to_timestamp(cr_date, 'dd.MM.yyyy') - interval 1 second, 
    "yyyyMMdd'T'HH:mm:ss"
  ) as cr_date_new,
  rundate,
  -- 计算rundate往前推2个月的最后一天,拼接23:59:59后格式化
  date_format(
    last_day(add_months(to_date(rundate, 'yyyyMMdd'), -2)), 
    "yyyyMMdd'T'23:59:59"
  ) as last_date
from 你的实际表名
""")

如果你的需求是取rundate的上一个自然月最后一天,把add_months的第二个参数改为-1即可,当前逻辑和你给出的示例输出完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 16:12:01