我是Spark SQL的新手。我们正在将数据从SQL server迁移到Databricks。我使用的是SPARK SQL。你能建议如何在SPARK sql中为下面的日期函数实现以下功能吗?我可以看到,在spark sql中,datediff只给出了天数。
DATEDIFF(YEAR,StartDate,EndDate)
DATEDIFF(Month,StartDate,EndDate)
DATEDIFF(Quarter,StartDate,EndDate)发布于 2018-10-01 05:20:19
正如您所提到的,SparkSQL确实支持DATEDIFF,但只支持几天。我也会小心,因为参数似乎是相反的Spark,即
--SQL Server
DATEDIFF ( datepart , startdate , enddate )
--Spark
DATEDIFF ( enddate , startdate )不过,Spark确实支持一个类似的函数,称为months_between,您可以用它来代替DATEDIFF( month ...。此函数还返回一个小数,因此可以选择将其强制转换为INT,以实现与
SELECT startDate, endDate,
DATEDIFF( endDate, startDate ) AS diff_days,
CAST( months_between( endDate, startDate ) AS INT ) AS diff_months
FROM yourTable
ORDER BY 1;还有year和quarter函数,分别用于确定日期的年份和季度。你可以简单地减去年份,但季度会更棘手。也许你不得不‘算算一下’,或者最终使用日历表格。
发布于 2021-05-25 10:19:39
因为Spark不提供其他单元,所以我使用下面的方法,
select
(bigint(to_timestamp(endDate))) - (bigint(to_timestamp(startDate))) as time_diff这将产生第二个单位,因此除以60或3600可以转换单位。
https://stackoverflow.com/questions/52527571
复制相似问题