Impala SQL - 如何计算时间戳之间的月份?

Impala SQL - How to count Months between timestamps?

使用Impala SQL,有没有一种简洁的方法来计算两个时间戳之间的月数?

datediff 函数仅 returns 两个时间戳之间的天数,但我希望有一种优雅的方法可以对月数执行相同的计算。

不幸的是,这个问题很少有优雅的答案,even in full-featured programming languages like Python。答案取决于您如何定义 # of months between two timestamps.

如果我要使用 Impala 内置函数解决这个问题,我会首先对时间戳列进行排序,然后使用 TO_DATE(ts) 将时间戳转换为日期字符串,然后使用 [ =12=、MONTH(date)DAY(date) 将组件从日期字符串中拉出,最后使用类似于 的公式,并进行修改以比较天数如果较晚日期的天数小于较早日期的天数,则减去一个月。

MONTHS_BETWEEN(TIMESTAMP newer, TIMESTAMP older)

用途:Returns 两个 TIMESTAMP 值的日期部分之间的月数。除了日期之间的完整月份之外,还可以包括代表额外天数的小数部分。小数部分的计算方法是将天数之差除以 31(不考虑月份)。

Return 类型:DOUBLE

添加于:CDH 5.5.0 / Impala 2.3.0