我想找出Hive中两个时间戳日期之间的年数。这是我在sql中尝试的。在sql中:日期差异(年,日期1,日期2)但在 hive 里我试过:
Datediff(year(date1), year(date2))
但这会产生一个错误无法识别“datediff”(表达式规范中的“year”)附近的输入有人能帮我学这个新东西吗。
fruv7luv1#
假设需要整数,可以直接进行计算:
select (case when date_format(date1, 'MMDD') < date_format(date2, 'MMDD') then year(date1) - year(date2) - 1 else year(date1) - year(date2) end)
或者可以使用近似值:
select datediff(date1, date2) / 365.25
hfwmuf9z2#
如果输入是字符串和时间戳,那么您可以在下面尝试
hive> select current_timestamp(); OK 2019-01-29 04:57:04.128 hive> select year(from_unixtime(unix_timestamp('2019-01-29 04:57:04.128', 'yyyy-MM-dd HH:mm:ss.SSS'), 'yyyy-MM-dd')); OK 2019 hive> select year(from_unixtime(unix_timestamp('2021-01-29 04:57:04.128', 'yyyy-MM-dd HH:mm:ss.SSS'), 'yyyy-MM-dd')) - year(from_unixtime(unix_timestamp('2019-01-29 04:57:04.128', 'yyyy-MM-dd HH:mm:ss.SSS'), 'yyyy-MM-dd')); OK 2 Time taken: 0.054 seconds, Fetched: 1 row(s)
nfzehxib3#
您可以尝试以下方法:
SELECT YEAR(date1)-YEAR(date2)
mfuanj7w4#
有多种方法可以达到这样的效果:1) 提取和减法您只需从两个日期中提取年份,然后对这两个值执行减法。
select abs(extract(year from "2019-01-29") - extract(year from "2020-01-20"));
这种方法的问题是,即使减去同一年的第一天和最后一天,它也将返回0,如果两个日期是12月31日和1月1日,它将返回1,但如果这对usecase无害,我们只需要看看两个日期之间的年份是否发生了变化,那么这种方法是有用的。2) datediff函数函数将返回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) 函数之间的时间间隔此函数将返回两个日期之间的月数差。
select abs(cast(months_between('2019-01-10', '2020-01-10')as int));
上面的查询结果将返回12。如果你想得到年数的结果,那么你可以将上述查询的结果除以12。4) 自定义自定义项这种方法很复杂,因为您需要编写自定义udf函数,然后针对所有场景进行验证。编写一个自定义的udf函数,它以两个日期/字符串/时间戳作为输入,然后返回以年/月/日期/秒/分钟为单位的差值。您还可以使用配置单元中的多个可用自定义项编写查询,执行相同的操作。以下是供您参考的链接:hive语言手册
4条答案
按热度按时间fruv7luv1#
假设需要整数,可以直接进行计算:
或者可以使用近似值:
hfwmuf9z2#
如果输入是字符串和时间戳,那么您可以在下面尝试
nfzehxib3#
您可以尝试以下方法:
mfuanj7w4#
有多种方法可以达到这样的效果:
1) 提取和减法
您只需从两个日期中提取年份,然后对这两个值执行减法。
这种方法的问题是,即使减去同一年的第一天和最后一天,它也将返回0,如果两个日期是12月31日和1月1日,它将返回1,但如果这对usecase无害,我们只需要看看两个日期之间的年份是否发生了变化,那么这种方法是有用的。
2) datediff函数
函数将返回startdate和enddate之间的天数。当你除以365.25,它将返回小数点后的年数。
您可能需要将上述查询的结果截断为两位小数。如果你只想找一个整数,那就把它转换成整数。
3) 函数之间的时间间隔
此函数将返回两个日期之间的月数差。
上面的查询结果将返回12。如果你想得到年数的结果,那么你可以将上述查询的结果除以12。
4) 自定义自定义项
这种方法很复杂,因为您需要编写自定义udf函数,然后针对所有场景进行验证。
编写一个自定义的udf函数,它以两个日期/字符串/时间戳作为输入,然后返回以年/月/日期/秒/分钟为单位的差值。
您还可以使用配置单元中的多个可用自定义项编写查询,执行相同的操作。
以下是供您参考的链接:hive语言手册