如何在Spark SQL中格式化日期?

8

我需要将给出的日期格式: 2019-10-22 00:00:00 转换成这个格式: 2019-10-22T00:00:00.000Z

我知道这可以在某些数据库中通过以下方式完成:

在 AWS Redshift 中,您可以使用以下方法实现:

TO_DATE('{RUN_DATE_YYYY/MM/DD}', 'YYYY/MM/DD') || 'T00:00:00.000Z' AS VERSION_TIME

但我的平台是Spark SQL,因此以上两种方法都无法使用,最好的方法是使用以下方法:

concat(d2.VERSION_TIME, 'T00:00:00.000Z') as VERSION_TIME

这有点hacky,但仍然不完全正确。通过这种方式,我得到了这个日期格式:2019-10-25 00:00:00T00:00:00.000Z,但字符串中间的00:00:00部分是冗余的,不能保留在那里。

如果有人能提供任何见解,将不胜感激!

2个回答

8

这是我自然而然的想法。

spark.sql("""SELECT date_format(to_timestamp("2019-10-22 00:00:00", "yyyy-MM-dd HH:mm:ss"), "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") as date""").show(false)

结果如下:
+------------------------+
|date                    |
+------------------------+
|2019-10-22T00:00:00.000Z|
+------------------------+

3
也许可以尝试这种方式?这是一个有些不同的方法。
scala> val df = spark.range(1).select(current_date.as("date"))
scala> df.show()
+----------+
|      date|
+----------+
|2019-11-09|
+----------+

scala> 

df.withColumn("formatted",
    concat(
    regexp_replace(date_format('date,"yyyy-MM-dd\tHH:mm:ss.SSS"),"\t","T"),
    lit("Z")
    )
).show(false)

+----------+------------------------+
|date      |formatted               |
+----------+------------------------+
|2019-11-09|2019-11-09T00:00:00.000Z|
+----------+------------------------+

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接