有多种方法可以达到这样的效果:
1) 提取与减法
您可以简单地从两个日期中提取年份,然后对这两个值执行减法。
select abs(extract(year from "2019-01-29") - extract(year from "2020-01-20"));
这种方法的问题是,即使您减去同一年的第一天和最后一天,它也会返回 0,如果您的两个日期是 12 月 31 日和 1 月 1 日,它将返回 1,但如果这对用例和我们只需要看看两个日期之间的年份是否变化,那么这种方法很有用。
2) 日期差异函数
函数将返回 startdate 和 enddate 之间的天数。当您将其除以 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 函数
此函数将返回两个日期之间的月差。
select abs(cast(months_between('2019-01-10', '2020-01-10')as int));
以上查询将返回 12 作为结果。如果你想得到年数的结果,那么你可以将上述查询的结果除以 12。
4) 自定义 UDF
这种方法比上述所有方法都复杂,因为您需要编写自定义 UDF 函数,然后针对所有场景进行验证。
编写一个自定义 UDF 函数,该函数将两个日期/字符串/时间戳作为输入,然后返回年/月/日/秒/分钟的差异。
您可以编写一个查询,也可以使用 hive 中的多个可用 UDF 执行相同的操作。
这是供您参考的链接:
Hive Language Manual