Существует несколько способов достижения таких результатов:
1) Извлечение и вычитание
Вы можете просто извлечь год из двух дат, а затем выполнить вычитание из этих двухзначения.
select abs(extract(year from "2019-01-29") - extract(year from "2020-01-20"));
Проблема этого подхода в том, что он вернет вам 0, даже если вы вычитаете первый и последний день того же года, и вернет 1, если ваши две даты - 31 декабря и 1 января, ноесли это не вредно для варианта использования, и нам просто нужно посмотреть, изменился ли год между двумя датами, тогда этот подход может быть полезен.
2) функция datediff
Функция будетвернуть количество дней между начальной и конечной датой.Когда вы разделите это на 365,25, он вернет количество лет в десятичных разрядах.
select datediff('2019-02-01', '2019-01-27')/365.25;
Возможно, вы захотите урезать результат вышеупомянутого запроса до двух десятичных разрядов.Если вы ищете только целое число, просто приведите его к целому числу.
select cast(datediff('2019-02-01', '2019-01-27')/365.25 as int);
3) months_between function
Эта функция вернет разницу в количестве месяцев междудве даты.
select abs(cast(months_between('2019-01-10', '2020-01-10')as int));
Приведенный выше запрос вернет 12 в результате.Если вы хотите получить результат в количестве лет, то вы можете разделить результат вышеупомянутого запроса на 12.
4) Пользовательский UDF
Этот подход сложен, тогда всевыше, поскольку вам нужно написать свою пользовательскую функцию UDF, а затем выполнить проверку по всем сценариям.
Написать пользовательскую функцию UDF, которая принимает две даты / строки / метки времени в качестве входных данных, а затем возвращает разницу в годах / месяцах / датах /секунд / минут.
Вы можете написать запрос, также выполняя те же действия, используя несколько доступных пользовательских функций в улье.
Вот ссылка для справки: Руководство по языку Hive