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

如何在Databricks中使用PySpark返回yyyyMMdd格式的日期?

解决PySpark返回指定日期格式的问题

问题根源

你之前的代码仅在WHERE子句中转换日期格式用于条件匹配,但SELECT的仍是原始mydates日期字段。Spark的Date类型字段本身没有固定格式,yyyy-MM-dd是它默认的字符串展示形式,所以即便条件匹配成功,返回的字段还是日期类型,显示出来依然带横杠。

正确解决方法

要得到yyyyMMdd格式的结果,需要在SELECT阶段将日期字段转换为字符串类型,同时保证WHERE条件的匹配逻辑正确。

方法一:纯SQL写法

from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()

df = spark.sql("""
    SELECT date_format(mydates, 'yyyyMMdd') AS mydates 
    FROM xxxxx 
    WHERE date_format(mydates, 'yyyyMMdd') = date_format(last_day(add_months(current_date(), -1)), 'yyyyMMdd')
""")

方法二:PySpark函数API写法

from pyspark.sql import SparkSession
from pyspark.sql.functions import date_format, last_day, add_months, current_date

spark = SparkSession.builder.getOrCreate()

# 读取目标表
raw_df = spark.table("xxxxx")
# 过滤符合条件的数据并转换日期格式
result_df = raw_df.filter(
    date_format(raw_df.mydates, "yyyyMMdd") == date_format(last_day(add_months(current_date(), -1)), "yyyyMMdd")
).select(
    date_format(raw_df.mydates, "yyyyMMdd").alias("mydates")
)

额外说明

  • 你之前尝试的add_months(current_date(),'yyyyMMdd'-1)是错误写法:add_months的第二个参数必须是整数(月份数),不能用日期格式字符串做运算,这也是该代码无结果返回的原因。
  • 如果不把日期字段转为字符串,仅靠修改显示格式是无法得到yyyyMMdd结果的,因为Date类型的展示规则由Spark默认控制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:12:44