apache-spark-sql - SPARK SQl中的DATEDIFF

标签 apache-spark-sql datediff databricks

我是Spark SQL的新手。我们正在将数据从SQL Server迁移到Databricks。
我正在使用SPARK SQL。您能否建议以下日期函数在SPARK sql中实现以下功能?我可以看到datediff在spark sql中仅给出几天。

DATEDIFF(YEAR,StartDate,EndDate)
DATEDIFF(月,开始日期,结束日期)
DATEDIFF(四分之一,开始日期,结束日期)

最佳答案

正如您提到的,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;


还有yearquarter函数分别用于确定日期的年和季度。您可以简单地减去年数,但是四分之一则更加棘手。可能是您必须“做数学”或最终使用日历表。

关于apache-spark-sql - SPARK SQl中的DATEDIFF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52527571/

相关文章:

javascript - JS日期API : Diff between two dates in hours – Odd behaviour with current Date

java - 从 Apache Spark SQL 中的用户定义聚合函数 (UDAF) 返回多个数组

python - 如何在 PySpark 1.6.1 中将第二个数据帧的列传递到 UDF 中

MySQL 查询难题 - 找到最近的日期

azure - 从外部连接到 Databricks 管理的 Hive

python - 使用 pandas_udf 返回一个数组

jdbc - 无法基于 Microsoft Azure SQL 数据库表在 Microsoft Azure Databricks 中创建表

apache-spark - 相当于 Scala Dataset#transform 方法的 Pyspark 变换方法

apache-spark-sql - 将 Spark 数据帧写入 Oracle 数据库的性能问题

mysql - DATEDIFF() 函数