【发布时间】:2015-05-06 20:25:55
【问题描述】:
使用 Impala SQL,有没有一种简洁的方法来计算两个时间戳之间的月数?
datediff 函数仅返回两个时间戳之间的天数,但我希望有一种优雅的方法可以在 # 个月数上执行相同的计算。
【问题讨论】:
标签: impala
使用 Impala SQL,有没有一种简洁的方法来计算两个时间戳之间的月数?
datediff 函数仅返回两个时间戳之间的天数,但我希望有一种优雅的方法可以在 # 个月数上执行相同的计算。
【问题讨论】:
标签: impala
不幸的是,even in full-featured programming languages like Python 这个问题很少有优雅的答案。答案取决于你如何定义# of months between two timestamps。
如果我要使用 Impala 内置函数来解决这个问题,我会首先对时间戳列进行排序,然后使用 TO_DATE(ts) 将时间戳转换为日期字符串,然后使用 YEAR(date)、MONTH(date) 和DAY(date) 将组件从日期字符串中提取出来,最后使用类似于https://stackoverflow.com/a/4040338/171965 的公式,修改为同样比较天数,如果后面日期的天数小于则减去一个月较早日期的天数。
【讨论】:
MONTHS_BETWEEN(TIMESTAMP newer, TIMESTAMP older)
目的:返回两个 TIMESTAMP 值的日期部分之间的月数。除了日期之间的完整月份外,还可以包含一个小数部分,表示额外的天数。小数部分的计算方法是将天数之差除以 31(与月份无关)。
返回类型:DOUBLE
添加于:CDH 5.5.0 / Impala 2.3.0
【讨论】: