SPARK 中的 DATEDIFF SQl

DATEDIFF in SPARK SQl

我是 Spark 的新手 SQL。我们正在将数据从 SQL 服务器迁移到 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 ...。此函数还 returns 一个十进制数,因此可选择将其转换为 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;

还有yearquarter函数分别用于确定日期的年份和季度。您可以简单地减去年份,但季度会更加棘手。您可能必须 'do the math' 或最终使用日历 table.

由于Spark没有提供其他单元,我使用下面的方法,

select 
    (bigint(to_timestamp(endDate))) - (bigint(to_timestamp(startDate))) as time_diff

这会产生第二个单位,因此除以 60 或 3600 可以转换单位。