计算蜂巢中两个日期之间的月份

Posted

技术标签:

【中文标题】计算蜂巢中两个日期之间的月份【英文标题】:calculate months between two dates in hive 【发布时间】:2020-09-27 15:08:16 【问题描述】:

我试图找出 currentdate 和列 (emp_joined) 之间的月差小于 24 个月。 emp_joined 列的数据类型是 int。为此,我编写了以下查询来获取记录。

从表中选择 id,emp_joined (abs(month_between(cast(from_unixtime(unix_timestamp(current_date,'yyyy-MM-dd'),'yy-MM-dd'),from_unixtime(unix_timestamp(cast(emp_joined as string),'yyMMdd'),'yy- MM-dd')as int)))

但是查询返回的是当前日期和列 emp_joined 之间不少于 24 个月的所有记录。 谁能帮我查询一下。

【问题讨论】:

表中的Unix时间戳数据在哪里? EMP_JOINED 似乎不是 Unix 时间戳。 【参考方案1】:

months_between 接受 yyyy-MM-dd 格式的日期。试试这个

where abs(cast(months_between(current_date, 
                              from_unixtime(unix_timestamp(cast(emp_joined as string),'yyMMdd'),'yyyy-MM-dd')
              )as int)) < 24

【讨论】:

我试过上面的查询它不起作用。问题在于 id 为 1、2、3 的记录,emp_joined 是 2002 年的数据。但是当我从 unix_timestamp 转换它时,蜂巢将其视为 2022 年。 @AnushaRadhakrishnan 这是因为数据不是 yyMMdd 格式。我猜它是个位数的月份而不是两个,对吧? 月份为两位数。 @AnushaRadhakrishnan 那么 20331 是什么意思? Yr =2020 Mth=33 ??? day =1 月可以是 33 @AnushaRadhakrishnan 如果 20331 应该被解析为 2020-03-31,你可以应用这个逻辑来转换日期:from_unixtime(unix_timestamp(cast(emp_joined as string),case when length(cast(emp_joined as string))=5 then 'yyMdd' else 'yyMMdd' end),'yyyy-MM-dd') 假设它可以是 5 位或 6 位数字,如果它是 5 位数字,那么月份是一位数。对于 6,它是两位数的月份。您可以根据自己的数据为CASE添加更多条件

以上是关于计算蜂巢中两个日期之间的月份的主要内容,如果未能解决你的问题,请参考以下文章

如何用PHP+MySQL计算两个日期之间的月份数和其余下的天数?

JS 计算两个日期之间的月份,不足一个月按一个月计算(求大神指点)

Java 8计算两个日期之间的月份

获取两个日期之间的所有月份

计算SQL中两个日期之间的月数[重复]

怎么用excel计算两个日期之间的间隔年限?