计算蜂巢中两个日期之间的月份
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计算两个日期之间的月份数和其余下的天数?