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