在 Databricks SQL 中将字符串转换为日期返回 null

Posted

技术标签:

【中文标题】在 Databricks SQL 中将字符串转换为日期返回 null【英文标题】:Converting String to date in Databricks SQL returns null 【发布时间】:2021-06-12 19:17:20 【问题描述】:

我有一个表,其中包含名为 Date 的字符串列,其中包含值 (dd-Mon-yy格式化数据和yyyy-mm-dd格式化数据)

01-jan-21
01-feb-21
01-mar-21
2021-01-01
2021-02-01

我试图将其转换为所有成员的日期格式yyyy-mm-dd

to_date(date,'yyyy-mm-dd') 但它返回 null 。

如何在 Spark SQL 中将字符串转换为特定的日期格式为yyyy-mm-dd

【问题讨论】:

【参考方案1】:

由于您有两种不同的日期类型,您需要分别指定它们:

select coalesce(to_date(date,'yyyy-MM-dd'), to_date(date,'dd-MMM-yyyy'))

【讨论】:

【参考方案2】:

您需要确定列的格式。在这种情况下,您可以只使用长度:

(case when length(date) = 10 then to_date(upper(date), 'yyyy-MMM-dd')
      else to_date(date, 'yyyy-mon-dd')
 end)

【讨论】:

这会将所有 yyyy-mm-dd 格式的日期设置为 2020-01-01 另外,2021 年 1 月 1 日仍然输出为 NULL。感谢您的回复【参考方案3】:

spark SQL 中我们自己的日期格式化程序

Select date.split('-')[2]||'-'||case when length(date.split('-')[0]) = 1 then '0'||date.split('-')[0] else  date.split('-')[0] end  || case when length(date.split('-')[1]) = 1 then '0'||date.split('-')[1] else  date.split('-')[1] end] 
Date = date_column

日期格式yyyy-mm-dd 分隔符可以不同。

没有任何日期格式。

【讨论】:

以上是关于在 Databricks SQL 中将字符串转换为日期返回 null的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Azure Databricks SQL 中将字段值转换为逗号分隔

在 spark sql 中将字符串类型转换为数组类型

在scala中将spark决策树模型调试字符串转换为嵌套JSON

在 SQL(Redshift)中将字符串(43677)转换为日期格式 [关闭]

如何在 Datagrip 中将 Java SQL 字符串转换为 SQL?

如何在 SQL Server 中将字符串转换为日期时间?