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 - 如何计算时间戳之间的月份?的主要内容,如果未能解决你的问题,请参考以下文章

Hive 和 Impala 之间的时间戳

在 hive/impala sql 中按日期获取数据,

在 Impala SQL 中获取时间戳行的差异,每次都会更新差异条件

Impala SQL - 获取最大时间戳记录 - 不产生结果

hive 或 impala 中的计算表统计信息如何加速 Spark SQL 中的查询?

SQL Server - 以 HH:MM:SS 格式计算两个日期时间戳之间的经过时间