1

我试图更好地理解date_formatSpark SQL 提供的函数。根据官方 databricks 文档(我正在使用 databricks),此函数需要任何日期/字符串采用有效的日期时间格式。以下是相同的链接。

我发现很难理解这里“有效”的确切定义是什么。我试图通过这里的两个示例来了解功能。输入 YYYY-MM-DD 格式(2021-07-09)的字符串,我得到了正确的预期结果:

以 DD-MM-YYYY 格式(20-07-2021)输入字符串,我得到空值:

为什么会这样?这个函数是如何理解我传递的参数确实是 YYYY-MM-DD 格式的?它也可能是 YYYY-DD-MM。

我的要求是我实现一个可以处理各种有效日期格式(MM-DD-YYYY、YYYY-MM-DD、DD-MM-YYYY)并相应地格式化日期的逻辑。

4

1 回答 1

0

以下是 ANSI 日期/时间数据类型的有效输入和输出格式:

示例: ANSIDATE yyyy-mm-dd 2007-02-28 TIME WITH TIME ZONE hh:mm:ss.ffff... [+|-]th:tm

时区偏移的有效范围是-14:00+14:00。date 符合公历的 ANSI SQL 标准定义:“注意 85 - 日期时间数据类型将允许将公历格式的日期存储在日期范围0001-01-01 CE9999-12-31 CE

有关有效格式的详细信息,请参阅Databricks SQL 日期时间模式。该函数检查结果日期是否是 Proleptic 公历中的有效日期,否则返回 NULL

当您使用“ 20-07-2021 ”时,它不符合“ yyyy-mm-dd ”,因此结果为 NULL

或者,您可以使用make_date从年、月和日字段创建日期的函数。或者更好的使用to_date 功能

select date_format(to_date('9/15/2021', 'MM/dd/yyyy'), 'yyyy/MM/dd')

请参阅Spark 中用于格式化和解析的日期时间模式

于 2021-09-15T04:52:24.403 回答