首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SPARK SQl的DATEDIFF

SPARK SQl的DATEDIFF
EN

Stack Overflow用户
提问于 2018-09-27 08:01:25
回答 2查看 50.6K关注 0票数 19

我是Spark SQL的新手。我们正在将数据从SQL server迁移到Databricks。我使用的是SPARK SQL。你能建议如何在SPARK sql中为下面的日期函数实现以下功能吗?我可以看到,在spark sql中,datediff只给出了天数。

代码语言:javascript
复制
DATEDIFF(YEAR,StartDate,EndDate)
DATEDIFF(Month,StartDate,EndDate) 
DATEDIFF(Quarter,StartDate,EndDate)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-01 05:20:19

正如您所提到的,SparkSQL确实支持DATEDIFF,但只支持几天。我也会小心,因为参数似乎是相反的Spark,即

代码语言:javascript
复制
--SQL Server
DATEDIFF ( datepart , startdate , enddate )

--Spark
DATEDIFF ( enddate , startdate )

不过,Spark确实支持一个类似的函数,称为months_between,您可以用它来代替DATEDIFF( month ...。此函数还返回一个小数,因此可以选择将其强制转换为INT,以实现与

代码语言:javascript
复制
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函数,分别用于确定日期的年份和季度。你可以简单地减去年份,但季度会更棘手。也许你不得不‘算算一下’,或者最终使用日历表格。

票数 30
EN

Stack Overflow用户

发布于 2021-05-25 10:19:39

因为Spark不提供其他单元,所以我使用下面的方法,

代码语言:javascript
复制
select 
    (bigint(to_timestamp(endDate))) - (bigint(to_timestamp(startDate))) as time_diff

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52527571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档