我是Spark SQL的新手。我们正在将数据从SQL Server迁移到Databricks。 我正在使用SPARK SQL。您能否建议如何在SPARK SQL中实现以下功能以进行日期函数处理。我发现datediff只能在spark sql中返回天数。
DATEDIFF(YEAR,StartDate,EndDate)
DATEDIFF(Month,StartDate,EndDate)
DATEDIFF(Quarter,StartDate,EndDate)
我是Spark SQL的新手。我们正在将数据从SQL Server迁移到Databricks。 我正在使用SPARK SQL。您能否建议如何在SPARK SQL中实现以下功能以进行日期函数处理。我发现datediff只能在spark sql中返回天数。
DATEDIFF(YEAR,StartDate,EndDate)
DATEDIFF(Month,StartDate,EndDate)
DATEDIFF(Quarter,StartDate,EndDate)
正如你所提到的,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
函数可以分别确定日期的年份和季度。你可以简单地减去年份,但季度会更棘手。可能需要“做数学运算”,或者最终使用日历表。
select
(bigint(to_timestamp(endDate))) - (bigint(to_timestamp(startDate))) as time_diff
这会得到第二个单位,因此除以60或3600可以转换单位。
Spark最近的更新支持datediff(endDate,StartDate)函数,返回天数。