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

Databricks Spark SQL的date_format函数预期输入日期格式是什么?

现象原因

date_format 函数的输入要求为日期/时间戳类型,如果你直接传入字符串参数,Spark会默认按照 ISO 8601标准日期格式 yyyy-MM-dd 做隐式类型转换:

  • 输入2021-07-09符合该格式,隐式转换为日期类型成功,因此可以正常返回格式化结果
  • 输入20-07-2021不符合该格式,隐式转换失败返回null,最终date_format输出null

Spark不会自动猜测YYYY-DD-MM等其他格式,是因为隐式转换只绑定了默认的ISO标准格式,没有自动尝试多格式匹配的逻辑,避免歧义。

多格式兼容实现方案

你需要先手动将多格式的字符串统一转换为日期类型,再调用date_format做格式化,根据你使用的Spark版本有两种实现方式:

1. Spark 3.0及以上版本

可以直接给to_date函数传入候选格式数组,函数会按顺序尝试匹配,直到找到符合的格式完成转换:

SELECT 
  date_format(
    to_date(
      待转换的日期字符串列,
      array('MM-dd-yyyy', 'yyyy-MM-dd', 'dd-MM-yyyy')
    ),
    '目标输出格式,例如yyyy年MM月dd日'
  ) as formatted_date
FROM 你的表名

2. Spark 3.0以下版本

用coalesce函数嵌套多个指定不同格式的to_date,实现按顺序尝试转换的逻辑:

SELECT 
  date_format(
    coalesce(
      to_date(待转换的日期字符串列, 'MM-dd-yyyy'),
      to_date(待转换的日期字符串列, 'yyyy-MM-dd'),
      to_date(待转换的日期字符串列, 'dd-MM-yyyy')
    ),
    '目标输出格式,例如yyyy-MM-dd'
  ) as formatted_date
FROM 你的表名

注意:候选格式的顺序需要根据你的业务场景调整,遇到歧义日期(例如01-02-2023)时,排在前面的格式会优先命中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:06:05