在 Spark SQL 中转换为日期

问题描述 投票:0回答:1

我正在尝试将 Spark SQL 中 Microsoft Fabric 中格式为“2024 年 5 月 30 日”的字符串值转换为日期。

名为 TITLE 的初始列具有以下格式的文本:

“一些文字 - 2024 年 5 月 30 日 11:26”

我已经成功地得到了它,它看起来像这样:

“2024 年 5 月 30 日”

现在我需要将其转换为日期格式。

我正在尝试使用下面的代码设计逻辑,并将现有逻辑分离到 cte 中,希望有人可以建议我需要做什么而不是“to_timestamp”,或者我需要做哪些进一步的争论to_timestamp 上班。

我知道这一切开始看起来有点可怕......在 SQL Server 中也有类似的工作,使用 TRY_CONVERT (和 CHARINDEX 而不是 INSTR),我正在尝试将其适应 Spark SQL:

out = spark.sql(f"""

with cte1 as (
SELECT
    TITLE
    ,SYSTEMONLY as System_Only
    ,IF(SYSTEMONLY = "Yes"
      ,IF(len(TITLE) <= 28 AND TITLE LIKE '&Snapshot%',
        "PLACEHOLDER",
            REPLACE(
                REPLACE(
                  REPLACE(
                      REPLACE(  
                        SUBSTRING(
                            TRIM(
                                SUBSTRING(
                                    TITLE, 
                                    INSTR(
                                      TITLE,' - '
                                    ) + 3,
                                    LEN(TITLE)
                                )
                            ),
                        1,
                  len(
                    TRIM(
                      SUBSTRING(
                        TITLE,
                        INSTR(
                          TITLE,' - '
                          ) + 3,
                        LEN(TITLE)
                      )
                    )
                  ) -6)
                      ,'th','')
                  ,'nd','')
              ,'st','')
          ,'rd','')
      )
      ,NULL
    ) as Budget_Date


FROM LakehouseName.TableName
WHERE SYSTEMONLY = 'Yes'

)

SELECT TITLE, System_Only, Budget_Date,
to_timestamp(Budget_Date,'dd/MM/yyyy') as FOrmatted

FROM cte1

""")
display(out)
apache-spark-sql
1个回答
0
投票

您只给出了一个示例,所以我做了一些假设(2 位数字表示日期,3 个字符表示月份)。

 to_date ('30 May 2024', 'dd MMM YYYY')

这将返回(作为日期)

2024-05-30

根据您的 Spark 版本,您可能需要先运行此命令:

spark.conf.set("spark.sql.legacy.timeParserPolicy","LEGACY")
© www.soinside.com 2019 - 2024. All rights reserved.