spark SQL 中迄今为止的字符串(不是数据框)

String to date in spark SQL (not dataframe)

我正在尝试使用 spark SQL 来查询 table,其中用户填写的日期没有遵循任何严格的格式,因此您会看到诸如“10/4/ 21”和“10/04/21”,例如。我的查询尝试是

select CAST(unix_timestamp(thedate,"mm/d/yy") AS TIMESTAMP) from table

这适用于像“10/4/21”这样的日期,但不适用于“10/04/21”(反之亦然,“mm/dd/yy”适用于“10/04/21” “但不适用于“10/4/21”)。有没有什么方法可以格式化查询,使其适用于任何一种日期格式?

您可以尝试使用两种格式转换 thedate,然后应用 COALESCE 以返回使用有效格式转换的结果。


sql = """
SELECT thedate,
       Cast(COALESCE(unix_timestamp(thedate, "MM/d/yy"),
            unix_timestamp(thedate, "MM/dd/yy")
            ) AS TIMESTAMP) AS thedate_astimestamp 
FROM   (SELECT Explode(Array('10/4/21', '10/04/21', '10/11/21')) AS thedate)  
"""
spark.sql(sql).show()

输出

+--------+-------------------+
| thedate|thedate_astimestamp|
+--------+-------------------+
| 10/4/21|2021-10-04 00:00:00|
|10/04/21|2021-10-04 00:00:00|
|10/11/21|2021-10-11 00:00:00|
+--------+-------------------+