我正在尝试将 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)
您只给出了一个示例,所以我做了一些假设(2 位数字表示日期,3 个字符表示月份)。
to_date ('30 May 2024', 'dd MMM YYYY')
这将返回(作为日期)
2024-05-30
根据您的 Spark 版本,您可能需要先运行此命令:
spark.conf.set("spark.sql.legacy.timeParserPolicy","LEGACY")