使用Impala SQL,是否有一种简明的方法来计算两个时间戳之间的月份数?
datediff
函数只返回两个时间戳之间的天数,但我希望有一种优雅的方法可以在#个月内执行相同的计算。
答案 0 :(得分:4)
不幸的是,这个问题很少有优雅的答案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的公式,并进行修改以比较日期编号并减去一个月如果较晚日期的日期编号低于较早日期的日期编号。
答案 1 :(得分:1)
MONTHS_BETWEEN(TIMESTAMP newer, TIMESTAMP older)
目的:返回两个TIMESTAMP值的日期部分之间的月数。除日期之间的完整月份外,还可以包括代表额外日期的小数部分。小数部分的计算方法是将天的差值除以31(与月无关)。
返回类型:DOUBLE
添加了:CDH 5.5.0 / Impala 2.3.0