Как вы уже упоминали, 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
для определения года и квартала даты соответственно.,Вы могли бы просто минус годы, но кварталы были бы более хитрыми.Возможно, вам придется «сделать математику» или использовать таблицу календаря.