databricks spark SQL中date_format函数的预期输入日期模式是啥

Posted

技术标签:

【中文标题】databricks spark SQL中date_format函数的预期输入日期模式是啥【英文标题】:What is expected input date pattern for date_format function in databricks spark SQLdatabricks spark SQL中date_format函数的预期输入日期模式是什么 【发布时间】:2021-09-14 19:21:03 【问题描述】:

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

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

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

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

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

【问题讨论】:

@KarthikBhyresh-MT 是的 【参考方案1】:

以下是 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 datetime patterns。该函数检查结果日期是否为公历中的有效日期,否则返回 NULL

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

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

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

见Datetime Patterns for Formatting and Parsing in Spark。

【讨论】:

虽然我明白了你的总体观点,但 make_date() 和 to_date() 都不适合我们的用例,因为输入字符串可能采用任何人类可以理解的格式,我们的逻辑应该能够解析他们正确。我们可能需要编写多个 case 语句来处理这种情况。 是的,这似乎是一种方式,通常表中的一列将使用单一日期格式。

以上是关于databricks spark SQL中date_format函数的预期输入日期模式是啥的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spark Databricks 中注册 SQL 函数

如果 Databricks 或 Spark SQL 中存在表,则插入

Databricks/Spark SQL - 如何在地图类型字段中获取数据

如何计算 Spark SQL(Databricks)中表中的列数?

spark sql如何在databricks中创建表

Databricks (Spark SQL) 表的索引