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 CE 到 9999-12-31 CE
有关有效格式的详细信息,请参阅Databricks SQL datetime patterns。该函数检查结果日期是否为公历中的有效日期,否则返回 NULL
当您使用“20-07-2021”时,它不符合“yyyy-mm-dd”,因此结果为 NULL
或者,您可以使用make_date
函数从年、月和日字段创建日期。或者更好地使用to_date
function
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 - 如何在地图类型字段中获取数据